问题描述
因为公司用的Linux服务器,在把spring+springmvc+hibernate项目部署上去之后,测试出现了问题:
咋看异常,觉得问题不大,是不是把时间格式修正为:yyyy-MM-dd HH:mm:ss格式就不会异常了,结果不如人意。
解决方案
spring4.2版本指定的是GsonHttpMessageConverter,所以从异常来看是gson的异常,我们今天说的解决方案来自Jackson,所以:
1. spring.xml配置
<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 -->
<mvc:annotation-driven />
<!-- 配置spring的message转换器 避免IE执行AJAX时,返回JSON让下载 -->
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
<value>text/plain; charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 指定springmessage转换器为Jackson -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<!-- json转换器 -->
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
习惯用注解的朋友这句应该是有了的:
<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 -->
<mvc:annotation-driven />
那么就加上对Jackson转换器的指定,就是这句话下面的两个bean配置。
2、Entity某个时间类型字段的配置
@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@Column(name = "trading_endtime", length = 19)
public Date getTradingEndtime() {
return this.tradingEndtime;
}
我在原来基础添加了一个注解:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
这个注解来源Jackson:
com.fasterxml.jackson.annotation.JsonFormat
@JacksonAnnotation
@Target(value={ANNOTATION_TYPE, FIELD, METHOD, PARAMETER, TYPE})
@Retention(value=RUNTIME)
至此,异常比较优雅的解决。