gpt4 book ai didi

java - jackson 的 InvalidDefinitionException

转载 作者:行者123 更新时间:2023-12-01 19:15:52 24 4
gpt4 key购买 nike

在 spring boot 2.2.2、java 11 中,通过 Ibm mq 接收对象。

接收到的对象具有 LocalDate 数据类型。

项目在 maven 中有 spring-boot-starter-web starter。

我在项目中看到这些 jar

jackson 数据类型-jdk 8-2.10.1 jackson 数据类型-jsr310-2.10.1

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class BillingEvent {
public Long Id;
public LocalDate billingCreatedDate;
}

在我的属性中,我有

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

我收到错误

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDate (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2019-09-02')

最佳答案

对我来说,将 setter 添加到您的 BillingEvent 中就足够了,例如:

public void setBillingCreatedDate(String str) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
billingCreatedDate = LocalDate.parse(str, formatter);
}

有关格式设置的更多信息,请参见:String to LocalDate

基于评论:

这个Is there a jackson datatype module for JDK8 java.time?可能对您有帮助,如果没有,则不提供帮助,下面是一个工作实现的示例。 (没有任何检查等):

public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {

private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

@Override
public LocalDate deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return LocalDate.parse(p.readValueAs(String.class), formatter);
}

}

您也可以在其他地方使用它,就像在 BillingEvent 中使用它一样:

@JsonDeserialize(using = LocalDateDeserializer.class)
public LocalDate billingCreatedDate;

关于java - jackson 的 InvalidDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com