众所周知,用Spring cloud构建微服务架构时,后台接收controller通常用@RestController注解。
@Restcontroller是@Controller和@ResponseBody的结合体。
这样就将后台返回的Java对象转换为Json字符串传递给前台,
但是当数据库字段为date类型时,@ResponseBody注解在转换日期类型时会默认把日期转换为时间戳(例如: date:2017-10-25 转换为 时间戳:15003323990)。
此时有两种方式可以解决日期转换Json问题:
1、(不推荐)局部修改,自定义注解进行将日期类型转换为Date类型。
2、(强烈推荐)全局修改,用MappingJackson2HttpMessageConverter配置在XML(SpringMVC)或者配置在Application.Java启动类(Spring boot、Spring cloud)。
配置在Application.Java启动类(Spring boot、Spring cloud):
- @Bean
- public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
- MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
- //设置日期格式
- ObjectMapper objectMapper = new ObjectMapper();
- SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd");
- objectMapper.setDateFormat(smt);
- mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
- //设置中文编码格式
- List<MediaType> list = new ArrayList<MediaType>();
- list.add(MediaType.APPLICATION_JSON_UTF8);
- mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
- return mappingJackson2HttpMessageConverter;
- }
注意:Spring3.x 用MappingJacksonHttpMessageConverter
Spring4.x 用MappingJackson2HttpMessageConverter
配置在XML(SpringMVC)
- <mvc:annotation-driven>
- <mvc:message-converters>
- <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
- <property name="objectMapper" ref="customObjectMapper"></property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
- Java代码中
- @Component("customObjectMapper")
- public class CustomObjectMapper extends ObjectMapper {
- public CustomObjectMapper() {
- CustomSerializerFactory factory = new CustomSerializerFactory();
- factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {
- @Override
- public void serialize(Date value, JsonGenerator jsonGenerator,
- SerializerProvider provider) throws IOException, JsonProcessingException {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- jsonGenerator.writeString(sdf.format(value));
- }
- });
- this.setSerializerFactory(factory);
- }
- }
注意:如果想要单个bean的某个日期字段显示年月日时分秒的话,只需要在对应日期的get方法上添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")即可。