解析Json之MappingJackson2HttpMessageConverter使用方法

众所周知,用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):

[java]  view plain  copy
  1. @Bean  
  2.     public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {  
  3.         MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();  
  4.         //设置日期格式  
  5.         ObjectMapper objectMapper = new ObjectMapper();  
  6.         SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd");  
  7.         objectMapper.setDateFormat(smt);  
  8.         mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);  
  9.         //设置中文编码格式  
  10.         List<MediaType> list = new ArrayList<MediaType>();  
  11.         list.add(MediaType.APPLICATION_JSON_UTF8);  
  12.         mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);  
  13.         return mappingJackson2HttpMessageConverter;  
  14.     }  

注意:Spring3.x 用MappingJacksonHttpMessageConverter

   Spring4.x 用MappingJackson2HttpMessageConverter

配置在XML(SpringMVC)

[html]  view plain  copy
  1. <mvc:annotation-driven>    
  2.     <mvc:message-converters>    
  3.         <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">    
  4.             <property name="objectMapper" ref="customObjectMapper"></property>    
  5.         </bean>    
  6.     </mvc:message-converters>    
  7. </mvc:annotation-driven>   
[html]  view plain  copy
  1. Java代码中  
[html]  view plain  copy
  1.   
[java]  view plain  copy
  1. @Component("customObjectMapper")    
  2. public class CustomObjectMapper extends ObjectMapper {    
  3.     
  4.     public CustomObjectMapper() {    
  5.         CustomSerializerFactory factory = new CustomSerializerFactory();    
  6.         factory.addGenericMapping(Date.classnew JsonSerializer<Date>() {    
  7.             @Override    
  8.             public void serialize(Date value, JsonGenerator jsonGenerator,    
  9.                     SerializerProvider provider) throws IOException, JsonProcessingException {    
  10.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
  11.                 jsonGenerator.writeString(sdf.format(value));    
  12.             }    
  13.         });    
  14.         this.setSerializerFactory(factory);    
  15.     }    
  16. }    

 
 

 
 

注意:如果想要单个bean的某个日期字段显示年月日时分秒的话,只需要在对应日期的get方法上添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")即可。

猜你喜欢

转载自blog.csdn.net/qq_35873847/article/details/80620531
今日推荐