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级别上。

相关文章
相关标签/搜索