SpringMVC使用@ResponseBody時返回json的日期格式


  1、SpringMVC使用@ResponseBody時返回json的日期格式java

 

     前提了解: @ResponseBody 返回json字符串的核心類是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 這個開源的第三方類庫。主要是如下兩個jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar。spring

    出現問題: 使用@ResponseBody時返回json字符串的日期格式。Date類型屬性默認返回一個Long型的時間戳,怎樣可以返回自定義的日期格式?json

    解決方案:目前有兩種方式實現,mvc

             一、局部修改(網上較多,但不推薦);app

          繼承Jackson的抽象類:JsonSerializer<T>,而後在javabean的屬性getter()上添加註解@JsonSerialize便可實現。ide

         代碼以下:this

 

Java代碼  spa

  1. import java.io.IOException;  code

  2. import java.text.SimpleDateFormat;  orm

  3. import java.util.Date;  

  4.   

  5. import org.codehaus.jackson.JsonGenerator;  

  6. import org.codehaus.jackson.JsonProcessingException;  

  7. import org.codehaus.jackson.map.JsonSerializer;  

  8. import org.codehaus.jackson.map.SerializerProvider;  

  9.   

  10. /** 

  11.  * @description 自定義返回JSON 數據格中日期格式化處理 

  12.  * @author aokunsang 

  13.  * @date 2013-5-28 

  14.  */  

  15. public class CustomDateSerializer extends JsonSerializer<Date> {  

  16.   

  17.     @Override  

  18.     public void serialize(Date value,   

  19.             JsonGenerator jsonGenerator,   

  20.             SerializerProvider provider)  

  21.             throws IOException, JsonProcessingException {  

  22.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  23.         jsonGenerator.writeString(sdf.format(value));  

  24.     }  

  25. }  

    使用方式:

    

Java代碼  

  1. @JsonSerialize(using = CustomDateSerializer.class)  

  2. public Date getCreateDate() {  

  3.     return createDate;  

  4. }  

             二、全局修改(強烈推薦):

         MappingJacksonHttpMessageConverter主要經過ObjectMapper來實現返回json字符串。這裏咱們繼承該類,註冊一個JsonSerializer<T>。而後在配置文件中注入自定義的ObjectMapper。

        代碼以下:

Java代碼  

  1. import java.io.IOException;  

  2. import java.text.SimpleDateFormat;  

  3. import java.util.Date;  

  4.   

  5. import org.codehaus.jackson.JsonGenerator;  

  6. import org.codehaus.jackson.JsonProcessingException;  

  7. import org.codehaus.jackson.map.JsonSerializer;  

  8. import org.codehaus.jackson.map.ObjectMapper;  

  9. import org.codehaus.jackson.map.SerializerProvider;  

  10. import org.codehaus.jackson.map.ser.CustomSerializerFactory;  

  11.   

  12. /** 

  13.  * @description 解決Date類型返回json格式爲自定義格式 

  14.  * @author aokunsang 

  15.  * @date 2013-5-28 

  16.  */  

  17. public class CustomObjectMapper extends ObjectMapper {  

  18.   

  19.     public CustomObjectMapper(){  

  20.         CustomSerializerFactory factory = new CustomSerializerFactory();  

  21.         factory.addGenericMapping(Date.classnew JsonSerializer<Date>(){  

  22.             @Override  

  23.             public void serialize(Date value,   

  24.                     JsonGenerator jsonGenerator,   

  25.                     SerializerProvider provider)  

  26.                     throws IOException, JsonProcessingException {  

  27.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  28.                 jsonGenerator.writeString(sdf.format(value));  

  29.             }  

  30.         });  

  31.         this.setSerializerFactory(factory);  

  32.     }  

  33. }  

   spring-servlet.xml中配置:

Java代碼  

  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>  

  8.     <bean id="customObjectMapper" class="com.pmc.dwa.common.custom.CustomObjectMapper"></bean>  

 2、@DatetimeFormat使用注意

     一、 使用@DatetimeFormat很簡單,這裏須要注意的是:使用時要引入一個類庫joda-time-1.3.jar,不然會沒法訪問相應路徑(400錯誤)。 

ps:該註解能夠做用在METHOD,FIELD以及PARAMETER級別上。

相關文章
相關標籤/搜索