【问题标题】:Java 8 Exception: com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer has no default (no arg) constructorJava 8 异常:com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer 没有默认(无 arg)构造函数
【发布时间】:2019-04-13 10:17:48
【问题描述】:

我有一个模型类,它有一个字段:

 @JsonDeserialize(using = InstantDeserializer.class)
 @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
 private OffsetDateTime offsetDt;

当这个模型的请求发送到服务器时,我的控制器抛出异常:

Caused by: java.lang.IllegalArgumentException: 
Class com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer 
has no default (no arg) constructor

pom.xml有2.8.11版本的依赖:

 <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
    </dependency>

我知道这是由@JsonDeserialize 需要无参数构造函数引起的,但是有解决方法吗?非常感谢。

【问题讨论】:

  • InstantDeserializer.class 是自定义反序列化器类?,如果我相信该类,您可以声明一些没有无参数构造函数的 arg 构造函数
  • @Deadpool 不,它不是自定义类.. com.fasterxml.jackson.datatype.jsr310.deser
  • 你的 POM 是什么样子的?
  • 看这个答案stackoverflow.com/a/45215515/4727666,你需要一个类的构造函数不带参数,所以你可以扩展 InstantDeserializer 来创建你自己的。

标签: java json jackson fasterxml jsr310


【解决方案1】:

错误表明您需要一个没有 arg 构造函数的类,因此您可以从 InstantDeserializer 扩展。 (以InstantDeserializer中的代码为super()的参数为例)

public class DefaultInstantDeserializer extends InstantDeserializer<OffsetDateTime> {
    public DefaultInstantDeserializer() {
        super(OffsetDateTime.class, DateTimeFormatter.ISO_OFFSET_DATE_TIME,
                OffsetDateTime::from,
                a -> OffsetDateTime.ofInstant(Instant.ofEpochMilli(a.value), a.zoneId),
                a -> OffsetDateTime.ofInstant(Instant.ofEpochSecond(a.integer, a.fraction), a.zoneId),
                (d, z) -> d.withOffsetSameInstant(z.getRules().getOffset(d.toLocalDateTime())),
                true);
    }
}

那么你就可以使用它了:

@JsonDeserialize(using = DefaultInstantDeserializer.class)

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2016-07-18
    • 1970-01-01
    • 2011-12-11
    • 2017-02-28
    相关资源
    最近更新 更多