今天,项目经理突然说改一下某个接口的时间返回格式,从yyyy-MM-dd 改为 yyyy-MM-dd HH:mm:ss 由于是刚接手的项目,所以改的时候遇到了好多坑。
一开始以为是mybatis的sql 的jdbcType写的不对。改成Timestamp和Date后没有任何波动。
又改了java 的 变量 的数据类型, 试过java.util.Date java.sql.Date java.sql.TimeStamp 还是没有任何波动
然后就打算直接改sql,因为是oralce数据库,所以我在 日期的字段加了 to_char() 函数,指定日期格式,心想肯定可以,没想到返回到前端还是 yyyy-MM-dd
这时候, 我觉得不是底层的问题,应该是controller或者bean 的问题。 bean试过改变量类型不行, 我就干脆用Spring的注解@DateTimeFormat指定时间变量的格式,然而还不行。
那最后,就是controller返回给前端的时候出了问题,然后就看了一下json映射的配置文件,果然在jacksonObjectMapper那个bean里,配置了
<property name="simpleDateFormat" value="yyyy-MM-dd"
完整如下
<bean name="jacksonObjectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="featuresToDisable"> <array> <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS"/> </array> </property> <property name="simpleDateFormat" value="yyyy-MM-dd"> </property> <property name="timeZone" ref="gmtTimeZone"/> </bean>
最后将配置文件修改为yyyy-MM-dd HH:mm:ss 就好了。
后来还发现,用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss ") 注解可以覆盖上面的配置。
以后改时间格式,最方便还是用@JsonFormat来指定格式