SpringMVC在使用Jackson2时关于日期类型格式化的问题
2017-11-28 14:24
573 查看
*本例程序使用Jackson2.9.0,jackson1.x的处理方式稍稍有些不同。
在基于Spring&SpringMVC的Web项目中,我们常使用Jackson(1.x/2.x)来增加程序对Json格式的数据的支持。
因此,在实际应用中有个常见的需求:日期的格式化。
假设,User对象有个Date类型的属性birthday:
程序支持如下api请求,而我们希望在返回Json格式的User资料时,对Date类型的birthday进行一下格式化。
实现上述需求大体有两种常用的方式:
1.使用@JsonFormat注解
该方法只需在关键字段加上@JsonFormat注解即可,如下:
参数解释:pattern - 格式,timezone - 时区
2.设置MappingJackson2HttpMessageConverter的objectMapper
该方法主要对json数据转换时用到的HttpMessageConverter进行一些设置,进一步讲就是objectMapper在对日期类型数据序列化时设置成统一的pattern,配置如下:
或者:
方法1使用起来方便灵活,但如果有大量需要统一设置的字段属性,那么推荐使用方法2。或者两种方法混合使用,作用优先级:方法1 > 方法2。
在基于Spring&SpringMVC的Web项目中,我们常使用Jackson(1.x/2.x)来增加程序对Json格式的数据的支持。
因此,在实际应用中有个常见的需求:日期的格式化。
假设,User对象有个Date类型的属性birthday:
class User implements Serializable { private Date birthday; //... }
程序支持如下api请求,而我们希望在返回Json格式的User资料时,对Date类型的birthday进行一下格式化。
@Controller class UserAction { @RequestMapping("/user/find/{id}") public @ResponseBody User getUserById(@PathVariable("id") int id) { return userService.getUserById(id); } }
实现上述需求大体有两种常用的方式:
1.使用@JsonFormat注解
该方法只需在关键字段加上@JsonFormat注解即可,如下:
class User implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date birthday; //... }
参数解释:pattern - 格式,timezone - 时区
2.设置MappingJackson2HttpMessageConverter的objectMapper
该方法主要对json数据转换时用到的HttpMessageConverter进行一些设置,进一步讲就是objectMapper在对日期类型数据序列化时设置成统一的pattern,配置如下:
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
或者:
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="simpleDateFormat" value="yyyy-MM-dd HH:mm:ss" /> </bean> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="objectMapper" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
方法1使用起来方便灵活,但如果有大量需要统一设置的字段属性,那么推荐使用方法2。或者两种方法混合使用,作用优先级:方法1 > 方法2。
相关文章推荐
- SpringMVC在使用Jackson2时关于日期类型格式化的问题
- SpringMVC在使用Jackson2时关于日期类型格式化的问题
- 关于ArcGIS Runtime SDK for iOS中AGSLayerDefinition使用日期类型字段过滤的问题
- 关于使用LayoutParams清除设置以及DateFormat无法正确转换格式化日期的问题
- SpringMVC使用Jackson返回JSON时日期少一天的问题
- 关于myBatis与SQLserver 配合使用,查询类型为Date的数据时,日期会减少两天的问题
- 解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题
- 关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题
- 使用JavaScriptSerializer进行序列化日期类型应该注意的问题
- 使用JavaScriptSerializer进行序列化日期类型应该注意的问题
- SQL中CONVERT(转化日期类型、格式化日期)函数使用
- 使用 jackson序列格式化日期
- 关于如何使用反射声明一个泛型类型变量(泛型参数是动态的)的问题
- 关于日期格式化的一个小问题
- 关于myeclipse无法使用ctrl+shift+f快捷键格式化代码的问题
- 3.关于枚举类型使用默认值的问题
- 关于日期格式化的一个小问题
- 解决 JScript 中使用日期类型数据时出现类型错误的问题
- 使用Newtonsoft.json 解决 Asp.Net MVC DateTime类型数据Json格式化问题
- 关于MysQL中写入日期类型数据失败的问题