com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造`java.time.Instant`的实例(没有创建者,如默认构造

Posted

技术标签:

【中文标题】com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造`java.time.Instant`的实例(没有创建者,如默认构造):【英文标题】:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:Cannot construct instance of`java.time.Instant`(no Creators,like default construct): 【发布时间】:2020-01-01 15:54:57 【问题描述】:

我已经浏览了链接:JSON parse error: Can not construct instance of java.time.LocalDate: no String-argument constructor/factory method to deserialize from String value,但出现以下错误。

错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.Instant` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2019-08-28T15:15:44.183Z')

Java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class StudentResponse 
    private Integer a;
    private String b;
    private String c;
    private String d;
    private String e;
    private Instant lastUpdateDate;

【问题讨论】:

【参考方案1】:

我能够解析 Instant 字段为 "2019-08-28T15:15:44.183Z" 的 JSON

首先,确保你有一个依赖。例如。在build.gradle

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

然后将ObjectMapper 配置为使用此依赖项,而不是(反)序列化Instant 作为默认情况下的时间戳。我将我的ObjectMapper 设置为:

ObjectMapper mapper  = new ObjectMapper()
        .findAndRegisterModules()
        .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

【讨论】:

以上是关于com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造`java.time.Instant`的实例(没有创建者,如默认构造的主要内容,如果未能解决你的问题,请参考以下文章