Java 8异常:com.fasterxml.jackson.datatype.jsr310.deser.Instant



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

@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不需要arg构造函数引起的,但有解决方法吗?

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

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)

相关内容

  • 没有找到相关文章

最新更新