問題
在寫返回json格式數據的接口時候:
1、總會需要將Date轉換為比如yyyy-MM-dd HH:mm:ss格式的字符串。
2、也會遇到json返回Long類型數值到前端失真的問題,比如356454813136846848返回到前端后變成了356454813136846850。
解決辦法
當然可以在每個接口中對進行處理,但是這樣每次都進行時間格式化和類型轉換,太麻煩了。
下面介紹用MappingJackson2HttpMessageConverter轉換器對其進行統一處理。在配置類WebConfig中分別定義日期格式轉換器和long轉字符串的轉換器,并且在configureMessageConverters方法中將其加入到轉換器列表:
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(new ResourceHttpMessageConverter());
converters.add(new AllEncompassingFormHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(jackson2HttpMessageConverter());
}
/**
* 時間格式轉換器,將Date類型統一轉換為yyyy-MM-dd HH:mm:ss格式的字符串
* @author 北北
* @date 2017年9月10日上午9:33:06
* @return
*/
@Bean
public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
converter.setObjectMapper(mapper);
return converter;
}
/**
* 返回json時候將long類型轉換為String類型的轉換器
* @author 北北
* @date 2017年9月10日上午9:33:06
* @return
*/
@Bean
public MappingJackson2HttpMessageConverter longToStringConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
mapper.registerModule(simpleModule);
converter.setObjectMapper(mapper);
return converter;
}
}
去測試時候就會發現,只有先加入的轉換器生效,后加入的那個沒有效果,怎么辦呢?
后來想到了一個解決辦法,就是將兩個方法合并起來,最終代碼如下:
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(new ResourceHttpMessageConverter());
converters.add(new AllEncompassingFormHttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(jackson2HttpMessageConverter());
}
/**
* 時間格式轉換器,將Date類型統一轉換為yyyy-MM-dd HH:mm:ss格式的字符串
* @author 北北
* @date 2017年9月10日上午9:33:06
* @return
*/
@Bean
public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
//日期格式轉換
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//Long類型轉String類型
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
mapper.registerModule(simpleModule);
converter.setObjectMapper(mapper);
return converter;
}
}