您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发
【原】springboot使用jackson处理时间碰到的两个坑
不忘初心 2019-04-10 围观() 评论() 点赞() 【JAVA开发】
简介:之前使用springmvc的时候,没有太注意json转换的细节,而且也没出过什么大问题,换成springboot之后,自动化配置的东西太多,导致忽略了很多细节处
之前使用springmvc的时候,没有太注意json转换的细节,每次都是直接写了一个Databinder,也没出过什么大问题,换成springboot之后,自动化配置的东西太多,导致忽略了很多细节处理,最近就碰见了两个问题:
jackson转换时间有时区差,会导致时间晚8小时
在我本机上,我一直没有重现过,当时在服务器上出现过,导致入库的时间不准确,解决方案有很多,我选择了在配置文件中配置jackson的时区:
spring.jackson.time-zone=GMT+8
使用feign调用微服务的时候,提示日期format不对
项目微服务之间调用的时候,使用feign进行调用,被调用方使用@RequestBody以json格式接收数据
@PostMapping("/services/api/order/push")
public CommonRestResult push(@RequestBody @Valid OrderPushDTO orderPushDTO) {
return RestBusinessTemplate.transaction(() -> orderManager.push(orderPushDTO));
}
可是调用方传输数据的时候,就报错了:
2019-04-03 17:04:41.605 WARN 1080 --- [nio-9030-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize value of type java.util.Date from String "2019-04-02 16:41:29": not a valid representation (error: Failed to parse Date value '2019-04-02 16:41:29': Can not parse date "2019-04-02 16:41:29": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS', parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2019-04-02 16:41:29": not a valid representation (error: Failed to parse Date value '2019-04-02 16:41:29': Can not parse date "2019-04-02 16:41:29": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS', parsing fails (leniency? null))
at [Source: java.io.PushbackInputStream@556337e2; line: 1, column: 25] (through reference chain: com.digitalbertahan.loan.supermarket.biz.export.dto.OrderPushDTO["createTime"])
2019-04-03 17:04:41.668 WARN 1080 --- [nio-9030-exec-1] com.netflix.spectator.api.Spectator : no config impl found in classpath, using default
因为jackson支持的时间格式只有这几种:
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
"EEE, dd MMM yyyy HH:mm:ss zzz"
"yyyy-MM-dd"
类型倒是挺丰富的,但就是没有常用的yyyy-MM-dd HH:mm:ss格式。
解决方法也有很多,如果涉及到的字段不多,可以直接在字段上加上注解:@JsonFormat( pattern="yyyy-MM-dd HH:mm:ss"),如果日期字段很多,那就别一个个的加了,直接在配置中加上日期格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
如果是springboot工程,也可以直接在config类中配置:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder ->
jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("GMT+8"));
}
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
下一篇:分享几个常用的Java工具类
相关文章
- JPA报错“No identifier specified for entity”的原因
- springboot整合jpa启动报错'hibernate.dialect' not set
- Linux不使用tomcat搭建springboot服务图文教程
- springboot项目提示“Failed to determine a suitable driver class”
- springboot打war包,部署到外部tomcat
- springboot项目在mac下启动特别慢
- 使用idea搭建springboot项目图文教程
- Spring Boot配置Druid数据源和使用教程
- springboot连接mysql报错“java.lang.IllegalArgumentException: HOUR_OF_DAY: 2 -> 3”
- springboot项目打包时提示“程序包xxx不存在,找不到符号”
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们