![](/img/trans.png)
[英]Java InvalidDefinitionException when serializing object with jackson databind
[英]InvalidDefinitionException with jackson
在 Spring Boot 2.2.2、java 11 中,通過 Ibm mq 接收對象。
接收到的對象具有 LocalDate 數據類型。
項目在 maven 中有 spring-boot-starter-web starter。
我在項目中看到了這些 jar
傑克遜數據類型-jdk 8-2.10.1 傑克遜數據類型-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:無法構造
java.time.LocalDate
實例(沒有創建者,如默認構造,存在):沒有從字符串值反序列化的字符串參數構造函數/工廠方法('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
基於評論:
這是 JDK8 java.time 的 jackson 數據類型模塊嗎? 可能會幫助你,如果不是,它不是幫助,下面是一個工作實現的例子。 (沒有任何檢查左右):
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
使用它BillingEvent
:
@JsonDeserialize(using = LocalDateDeserializer.class)
public LocalDate billingCreatedDate;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.