解析Json之MappingJackson2HttpMessageConverter使用方法

众所周知,用Spring cloud构建微服务架构时,后台接收controller通常用@RestController注解。

@RestController注解的作用在 http://blog.csdn.net/m0_38016299/article/details/78270197中有讲解,

@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 list = new ArrayList();
    	list.add(MediaType.APPLICATION_JSON_UTF8);
    	mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
    	return mappingJackson2HttpMessageConverter;
    }

注意:Spring3.x 用MappingJacksonHttpMessageConverter

   Spring4.x 用MappingJackson2HttpMessageConverter

配置在XML(SpringMVC)

  
      
          
              
          
      
 
Java代码中
@Component("customObjectMapper")  
public class CustomObjectMapper extends ObjectMapper {  
  
    public CustomObjectMapper() {  
        CustomSerializerFactory factory = new CustomSerializerFactory();  
        factory.addGenericMapping(Date.class, new JsonSerializer() {  
            @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")即可。


如果有疑问,欢迎留言咨询~




你可能感兴趣的:(解析Json之MappingJackson2HttpMessageConverter使用方法)