SpringMVC 返回json的日期格式的問題的解決方法

springMVC中josn的日期類型輸出默認是時間戳,須要進行日期格式轉換。java

格式化輸出jsonspring

 方法一、(適用spring3.x和4.x的版本)數據庫

  在實體類的getter方法上面添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")json

  就能夠將json的日期格式化。須要導入的json的相關jar包  mybatis

  @JsonFromat存在於jackson-annotations-2.1.0.jar中。
  Maven項目須要添加的依賴:    mvc

<!-- json數據 -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.core.version}</version>
</dependency>

<properties>
    <jackson.core.version>2.4.2</jackson.core.version>
</properties>

在IDEA中查看maven的jar包依賴  app

 

  優缺點:maven

    優勢是簡單方便,缺點是須要在每一個須要的屬性的getter方法上面添加。宏觀的看比較繁瑣,但實際開發中ide

    也就一行代碼的事情,惟一很差的是mybatis自動生成實體類會覆蓋。測試

 方法2(在spring3.x版本中測試可用)

  在上面的方法中雖然簡單方便,但缺點也很明顯,自動生成代碼會覆蓋實體類,並且每一個日期屬性都要手動添加,

  實際中日期屬性又是廣泛必備。所以,大可全局處理,統一格式。這裏須要說下,在數據庫中的date和timestamp

  都會被mybatis轉換成date對象。至於生日精確到日、時間精確到到秒的格式規範可讓顯示層作處理。

  統一成yyyy-MM-dd HH:mm:ss。

  MappingJacksonHttpMessageConverter主要經過ObjectMapper來實現返回json字符串。這裏咱們繼承該類,註冊

  一個JsonSerializer<T>。而後在配置文件中注入自定義的ObjectMapper。

  第一步:編寫子類繼承ObjectMapper  

package cn.ll.ssm.controller.converter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;

/**      
* 項目名稱:springmvc_02_ssm   
* 類名稱:CustomJsonDateConverter   
* 類描述:解決Date類型返回json格式爲自定義格式
* 建立人:LL   
* 建立時間:2018年4月29日 上午11:13:08      
* @version       
*/
public class CustomJsonDateConverter extends ObjectMapper {
    public CustomJsonDateConverter(){
        CustomSerializerFactory factory = new CustomSerializerFactory();
        factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
          @Override
          public void serialize(Date value,
                     JsonGenerator jsonGenerator,
                     SerializerProvider provider)
              throws IOException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            jsonGenerator.writeString(sdf.format(value));
          }
        });
        this.setSerializerFactory(factory);
      }
}

第二步:在SpringMVC.xml中進行配置  

<mvc:annotation-driven conversion-service="conversionService" validator="validator">
         <mvc:message-converters>
          <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="objectMapper" ref="customObjectMapper"></property>
          </bean>
        </mvc:message-converters>
     </mvc:annotation-driven>
    
    <bean id="customObjectMapper" class="cn.ll.ssm.controller.converter.CustomJsonDateConverter"></bean>

第三步:

  這個配置沒法和上一個@JsonFormat共同使用。因爲全局統一了日期格式,date和datetime以及timestamp都是

一個格式,若是生日等date字段須要精簡,只能在顯示層裁剪。

 

參考:http://www.jb51.net/article/103032.htm

相關文章
相關標籤/搜索