首页   >   代码编程

springboot使用jackson处理时间碰到的两个坑

之前使用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

QQ群Ⅰ: 686430774 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451 (已满)

QQ群Ⅳ: 474195684

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-04-10

永久地址:https://www.jiweichengzhu.com/article/c518384ffe504b1e8f91ce6adec601ea

评论