SpringMVC RequestBody接收数据日期出现时差
2016-10-21 00:00
483 查看
在使用SpringMVC+Jackson json2的时候接收JSON数据的日间出现了时差,原因是因为在ObjectMapper中默认的时区是GMT。
SpringMVC中使用RequestMappingHandlerAdapter中的messageConverters来保存转换器,来对不同的消息类型进行转换,这里要解决时区问题我们就需要添加自定义的转换器,或者对已有的转换器做设置,SpringMVC对JSON数据做转换使用的是MappingJackson2HttpMessageConverter类,在这个类中有一个ObjectMapper对象,我们只要重新设置这个对象就可以了。
1.继承ObjectMapper并设置默认时区
2.配置Spring的转换器
当项目启动后我们所加的转换器会在messageConverters最前面,SpringMVC会依次遍历这些转换器并判断选择对应的转换器
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters
protected final static BaseSettings DEFAULT_BASE = new BaseSettings(DEFAULT_INTROSPECTOR, DEFAULT_ANNOTATION_INTROSPECTOR, STD_VISIBILITY_CHECKER, null, TypeFactory.defaultInstance(), null, StdDateFormat.instance, null, Locale.getDefault(), // TimeZone.getDefault() TimeZone.getTimeZone("GMT"), Base64Variants.getDefaultVariant() // 2.1 );
SpringMVC中使用RequestMappingHandlerAdapter中的messageConverters来保存转换器,来对不同的消息类型进行转换,这里要解决时区问题我们就需要添加自定义的转换器,或者对已有的转换器做设置,SpringMVC对JSON数据做转换使用的是MappingJackson2HttpMessageConverter类,在这个类中有一个ObjectMapper对象,我们只要重新设置这个对象就可以了。
1.继承ObjectMapper并设置默认时区
public class CustomerObjectMapper extends ObjectMapper { public CustomerObjectMapper() { this.setTimeZone(TimeZone.getDefault()); } }
2.配置Spring的转换器
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <!-- 将StringHttpMessageCOnverter的默认编码设为UTF-8 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> <!-- 添加一处JSON转换器 --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.isoftstone.cbems.common.json.CustomerObjectMapper"></bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
当项目启动后我们所加的转换器会在messageConverters最前面,SpringMVC会依次遍历这些转换器并判断选择对应的转换器
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters
for (HttpMessageConverter<?> converter : this.messageConverters) { if (converter instanceof GenericHttpMessageConverter) { GenericHttpMessageConverter genericConverter = (GenericHttpMessageConverter) converter; if (genericConverter.canRead(targetType, contextClass, contentType)) { if (logger.isDebugEnabled()) { logger.debug("Reading [" + targetType + "] as \"" + contentType + "\" using [" + converter + "]"); } return genericConverter.read(targetType, contextClass, inputMessage); } } if (targetClass != null) { if (converter.canRead(targetClass, contentType)) { if (logger.isDebugEnabled()) { logger.debug("Reading [" + targetClass.getName() + "] as \"" + contentType + "\" using [" + converter + "]"); } return ((HttpMessageConverter<T>) converter).read(targetClass, inputMessage); } } }
相关文章推荐
- SpringMVC @RequestBody接收Json对象字符串 @ResponseBody处理json数据类型
- Maven项目:Spring MVC + Ajax + Json + RequestBody:POST后台服务器接收前端JSON数据并注解到POJO内
- SpringMVC @RequestBody接收json字符串,自动将日期字符串转换为java.util.Date
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- Spring MVC @RequestBody接收JSON报HTTP 415/400问题的解决
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串--http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- Spring MVC @RequestBody接收JSON报HTTP 415/400问题的解决
- Spring MVC @RequestBody接收JSON报HTTP Statusd 415的问题