使用 lombok @Builder 时通过 Jackson 反序列化“2021-09-24 00:00:00”日期格式

Posted

技术标签:

【中文标题】使用 lombok @Builder 时通过 Jackson 反序列化“2021-09-24 00:00:00”日期格式【英文标题】:Deserialize '2021-09-24 00:00:00' date format via Jackson when using lombok @Builder 【发布时间】:2022-01-12 19:25:05 【问题描述】:

我从响应中得到以下对象


"upload_date": "2021-09-24 00:00:00"

我正在使用 jackson 反序列化到 LocalDateTime 字段

@Getter
@Builder
@JsonDeserialize(builder = AdGroup.AdGroupBuilder.class)
public class AdGroup 

    @JsonProperty("upload_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime uploadDate;


但我得到'Cannot deserialize value of type java.time.LocalDateTime from String "2021-09-24 00:00:00": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2021-09-24 00:00:00' could not be parsed at index 10' 我尝试使用“yyyy-MM-dd'T'HH:mm:ss”模式,有/没有'shape = JsonFormat.Shape.STRING',但总是出现同样的错误。

【问题讨论】:

***.com/questions/40327970/… 接受的答案有帮助吗? 这能回答你的问题吗? Deserialize Java 8 LocalDateTime with JacksonMapper 我没有添加一个重要的东西,我也使用了 lombok @Builder,所以这就是错误的原因。 【参考方案1】:

你能试试吗-

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'")

值示例 - “2021-12-08T16:49:02.449Z”

【讨论】:

【参考方案2】:

通过以下方式修复:

@Getter
@Builder
@JsonDeserialize(builder = AdGroup.AdGroupBuilder.class)
public class AdGroup 
        
   public static class AdGroupBuilder 
   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
   private LocalDateTime uploadDate;
   

@JsonProperty("upload_date")
private LocalDateTime uploadDate;


【讨论】:

以上是关于使用 lombok @Builder 时通过 Jackson 反序列化“2021-09-24 00:00:00”日期格式的主要内容,如果未能解决你的问题,请参考以下文章

Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

@Builder lombok注解

Lombok同时使⽤@Data和@Builder 的坑

lombok中的@Builder.Default注解

PMD 错误:在 Lombok Builder 中覆盖某些方法时的 AccessorMethodGeneration