Spring Boot同時實現返回json時候日期格式化以及Long類型轉換為String

問題

在寫返回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;
} 
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 阿妍和李靜自很久以前就是同學,那會上著初中剛剛和班,大家對自己班以外的外來人員都感到好奇,又巧合的坐了同桌,女孩子...
    哈哈dada閱讀 134評論 0 0
  • 漁陽飛鴻世紀園 中華大鼎入眼簾 設若項羽能轉世 力拔山兮也枉然
    燕山松閱讀 836評論 43 47
  • 真的好想你 整個世界似乎 都在下著雨 一滴兩滴三滴 它們在墻角相遇 而我卻蜷縮著身體 正在盡量壓抑著 自己的情緒 ...
    幻夢邪魂閱讀 372評論 2 3