`

【转】SpringMVC使用@ResponseBody时返回json的日期格式、@DatetimeFormat使用注意

 
阅读更多

 一、SpringMVC使用@ResponseBody时返回json的日期格式

 

     前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个开源的第三方类库。主要是以下两个jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar。

    出现问题: 使用@ResponseBody时返回json字符串的日期格式。Date类型属性默认返回一个Long型的时间戳,怎样能够返回自定义的日期格式?

    解决方案:目前有两种方式实现,

             1、局部修改(网上较多,但不推荐);

          继承Jackson的抽象类:JsonSerializer<T>,然后在javabean的属性getter()上添加注解@JsonSerialize即可实现。

         代码如下:

 

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.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. }  

             2、全局修改(强烈推荐):

         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> 

 二、@DatetimeFormat使用注意

     1、 使用@DatetimeFormat很简单,这里需要注意的是:使用时要引入一个类库joda-time-1.3.jar,否则会无法访问相应路径(400错误)。 

ps:该注解可以作用在METHOD,FIELD以及PARAMETER级别上。

使用介绍参考:http://www.captaindebug.com/2011/08/using-spring-3-datetimeformat.html#.UaR3mWWZk0k

 

   2、因为springMVC没有提供默认的日期转换器,前段页面传递过来日期字符串怎么转换为日期类型,如果没有提供全局日期转换器或者数据绑定的基础上,可以使用@DatetimeFormat注解完成。

分享到:
评论

相关推荐

    SpringMVC使用@ResponseBody.rar

    这个注解通常与控制器(Controller)方法一起使用,允许我们将Java对象直接序列化为JSON或XML格式,从而返回给客户端。下面我们将深入探讨`@ResponseBody`的使用、工作原理以及相关的配置和最佳实践。 1. **基本...

    springMVC3使用@ResponseBody向浏览器返回 json,注意区分jar包前缀

    @RequestMapping(value="/timeObject",produces = "application/json;charset=UTF-8" ) @ResponseBody ----------------------------------------------------------------------------- &lt;!-- @ResponseBody() ...

    Springmvc 4.x利用@ResponseBody返回Json数据的方法

    在Spring MVC 4.x版本中,开发者可以使用@ResponseBody注解来简化控制器层向客户端返回JSON格式数据的过程。 ### @ResponseBody注解使用方法 @ResponseBody注解可以作用于方法上,它会指示Spring MVC框架将该方法...

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

    同样,Spring MVC会使用HttpMessageConverter将返回的Java对象转换为适合HTTP响应的数据格式,如JSON或XML。 #### 2.1 JSON与XML数据转换 - 对于JSON数据,Spring MVC默认使用了Jackson库(Jackson2...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)

    此外,当请求体的数据结构复杂或者有特殊约束时,也可能需要对模型类进行额外的注解处理,如`@DateTimeFormat`和`@JsonFormat`等,以便正确解析日期和时间等复杂类型。 总结来说,`@RequestBody`和`@ResponseBody`...

    SpringMVC中后台转换json格式

    为了解决这个问题,我们需要确保SpringMVC能够正确地将返回的数据转换为JSON格式,并设置合适的响应头。 首先,我们需要引入Jackson库来处理JSON序列化和反序列化。Jackson是Java中广泛使用的JSON处理库,包括三个...

    spring MVC 对 ResponseBody返回json数据进行脱敏处理

    在Spring MVC框架中,开发Web应用时经常需要将对象转换为JSON格式的数据并返回给客户端。然而,在处理敏感数据时,我们可能希望对这些数据进行脱敏,即隐藏或替换某些字段,以保护用户隐私或者确保数据安全性。本文...

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    在SpringMVC框架中,`@ResponseBody`注解用于将方法的返回值直接转换为HTTP响应体,通常用于处理JSON或XML格式的数据。然而,当返回的字符串中包含中文字符时,如果没有正确设置编码,就可能导致乱码问题。本文将...

    springmvc-demo08-返回JSON数据.zip

    在Spring MVC框架中,返回JSON数据是常见的交互方式,尤其在构建RESTful API时更为重要。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读、易于解析的特性,被广泛应用于前后端数据...

    对json格式的数据进行封装和转化,@responsebody注解所需的jar包JSON.rar

    描述中提到的"springmvc进行Jason数据封装转化时可以即使用也是@responsebody",指的是在Spring MVC的控制器(Controller)中,我们可以使用`@ResponseBody`注解配合Jackson库,实现将Java对象直接转换为JSON格式的...

    Spring MVC – Easy REST-Based JSON Services with @ResponseBody

    标题中的“Spring MVC – Easy REST-Based JSON Services with @ResponseBody”是指使用Spring MVC框架构建基于REST的JSON服务,并通过使用`@ResponseBody`注解来简化这一过程。REST(Representational State ...

    springmvc加入json支持

    在实际开发中,你可能还需要处理JSON安全问题,例如使用`@JsonView`来限制返回的字段,或者使用`@JsonFormat`来控制日期格式等。同时,随着版本的更新,确保始终使用最新的稳定版本以获取最佳性能和安全性。

    springMvc注解之 ResponseBody和 RequestBody.docx

    在使用`@RequestBody`接收多层嵌套的JSON对象时,注意前端需要设置`contentType`为`"application/json"`,并且使用`JSON.stringify()`将数据转换为字符串。这是因为HTTP请求默认可能不包含正确的Content-Type头,...

    springMVC json格式转换demo

    本示例"springMVC json格式转换demo"将展示如何在Spring MVC应用中处理JSON格式的数据。 首先,确保你的项目依赖于`spring-web`模块,因为该模块包含了处理JSON所需的支持。在Maven的pom.xml文件中,添加以下依赖:...

    springMVC返回json数据需要的两个架包

    当一个控制器方法返回一个对象,并且该方法上有`@ResponseBody`注解时,Spring会调用适当的转换器(在这个场景下是Jackson的转换器)将对象转换为JSON格式。 3. Spring MVC与Jackson的集成:在Spring MVC中,为了...

    SpringMVC使用JSON的Jackson的jar包

    当返回的是一个对象时,Spring会使用配置的MessageConverter来将对象转换为合适的格式,如JSON。默认情况下,如果项目中包含Jackson库,SpringMVC会使用`MappingJackson2HttpMessageConverter`作为MessageConverter...

    springmvc学习笔记-返回json的日期格式问题的解决方法

    尤其是日期类型数据,在JSON中默认会被序列化为时间戳(long值),这样的格式对于前端开发者而言并不友好,尤其是当需要自定义日期格式以适应特定地区或业务需求时。 根据提供的文件信息,解决Spring MVC返回JSON的...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    在IT行业中,SpringMVC和JSON是两个非常重要的技术组件,尤其在开发Web应用程序时。SpringMVC作为Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构支持,而JSON则是一种轻量级的数据交换格式,常用于...

    SpringMVC利用Ajax,JQuery交互Json

    当Ajax请求成功时,`success`回调函数会被调用,参数`data`即为服务器返回的Json对象。你可以根据需要解析并操作这个数据,如更新DOM元素。 5. **错误处理** 如果请求过程中发生错误,`error`回调会被调用,提供...

Global site tag (gtag.js) - Google Analytics