`
aokunsang
  • 浏览: 816429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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即可实现。

         代码如下:

 

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

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;

/**
 * @description 自定义返回JSON 数据格中日期格式化处理
 * @author aokunsang
 * @date 2013-5-28
 */
public class CustomDateSerializer extends JsonSerializer<Date> {

	@Override
	public void serialize(Date value, 
			JsonGenerator jsonGenerator, 
			SerializerProvider provider)
			throws IOException, JsonProcessingException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		jsonGenerator.writeString(sdf.format(value));
	}
}

    使用方式:

    

    @JsonSerialize(using = CustomDateSerializer.class)
    public Date getCreateDate() {
        return createDate;
    }

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

         MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。

        代码如下:

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

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
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;

/**
 * @description 解决Date类型返回json格式为自定义格式
 * @author aokunsang
 * @date 2013-5-28
 */
public class CustomObjectMapper extends ObjectMapper {

	public CustomObjectMapper(){
		CustomSerializerFactory factory = new CustomSerializerFactory();
		factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
			@Override
			public void serialize(Date value, 
					JsonGenerator jsonGenerator, 
					SerializerProvider provider)
					throws IOException, JsonProcessingException {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				jsonGenerator.writeString(sdf.format(value));
			}
		});
		this.setSerializerFactory(factory);
	}
}

   spring-servlet.xml中配置:

<mvc:annotation-driven>
    	<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="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注解完成。

分享到:
评论
3 楼 accphc 2015-04-02  
2 楼 chensen5620097 2014-07-18  
楼上的问题解决了?
1 楼 penwei 2014-06-05  
org.xml.sax.SAXParseException; lineNumber: 149; columnNumber: 29; cvc-complex-type.2.1: 元素 'mvc:annotation-driven' 必须不含字符或元素信息项 [子级], 因为该类型的内容类型为空。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3237)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidComplexType(XMLSchemaValidator.java:3178)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3160)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3062)
	at com.sun.org.apache.xerces.internal.impl.xs.XM
LSchemaValidator.handleEndElement(XMLSchemaValidator.java:2140)

相关推荐

    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框架将该方法...

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

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

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

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

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

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

    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格式

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

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

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

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

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

    SpringMVC使用JSON的Jackson的jar包

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

    springmvc+国际化i18N+springmvc验证+jetbrick-template使用+@responsebody+谷歌guava

    springmvc+国际化i18N+springmvc验证+jetbrick-template使用+@responsebody+谷歌guava: 1)围绕springmvc做的国际化 2)围绕springmvc做的验证 3)使用的jetbrick-template模板引擎 ……

    SpringMVC利用Ajax,JQuery交互Json

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

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

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

Global site tag (gtag.js) - Google Analytics