4

我有一个具有字段的模型类:

 @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 需要无参数构造函数引起的,但是有解决方法吗?非常感谢。

4

1 回答 1

7

该错误表明您需要一个没有 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)
于 2018-11-12T04:30:50.723 回答