在spring boot 2.2.2中,java 11通过ibm mq接收对象。
收到的对象具有LocalDate数据类型。
项目在Maven中具有spring-boot-starter-web starter。
我在项目中看到这些罐子
jackson数据类型-jdk 8-2.10.1 jackson-datatype-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')
答案 0 :(得分:0)
对我来说,将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;