Java 具有继承和JsonDeserialize的Lombok
父类:Java 具有继承和JsonDeserialize的Lombok,java,jackson,polymorphism,lombok,Java,Jackson,Polymorphism,Lombok,父类: @Data public class ParentDAO { @JsonDeserialize(using = CustomInstantDeserializer.class) private final Instant estimatedTimeOfBerthing; @JsonDeserialize(using = CustomInstantDeserializer.class) private final Instant actualTimeOfBe
@Data
public class ParentDAO {
@JsonDeserialize(using = CustomInstantDeserializer.class)
private final Instant estimatedTimeOfBerthing;
@JsonDeserialize(using = CustomInstantDeserializer.class)
private final Instant actualTimeOfBerthing;
}
儿童班:
@Data
public class ChildDAO extends ParentDAO {
private final int countOfCnr1;
private final int countOfCnr2;
@Builder
public Child(Instant estimatedTimeOfBerthing, Instant actualTimeOfBerthing,
int countOfCnr1, int countOfCnr2) {
super(estimatedTimeOfBerthing, actualTimeOfBerthing);
this.countOfCnr1= countOfCnr1;
this.countOfCnr2= countOfCnr2;
}
}
CustomInstantDeserializer类:
public class CustomInstantDeserializer extends JsonDeserializer<Instant> {
@Override
public Instant deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException {
return BpmsDateUtils.fromString(jsonparser.getText());
}
}
在上面的场景中,我的API层正在从数据层(JSON)检索数据。
映射到ParentDAO
没有问题,但是当映射到ChildDAO
时,会引发以下异常->JSON解析错误:无法反序列化'java.time.Instant'类型的值。
我知道问题出在哪里->我正在向子构造函数传递一个
Instant
,而子构造函数不知道如何反序列化它。有人有什么想法或遇到过同样的问题吗?任何帮助都将不胜感激。您是否尝试过将@JsonDeserialize
放在ChildDAO
构造函数参数上?在您的场景中,DAO是什么?在我看来,它像一个值对象,而不是一把刀。@JanRiekeTried,它不是work@MichaelPiefel很抱歉命名错误!我的供应商就这样离开了……我还没有改变it@DanialChan,您使用的是哪个版本的Jackson
?您可以使用JsonCreator
注释对构造函数进行注释,并检查以下问题:
{
"estimatedTimeOfBerthing": "2019-10-10T05:30:00+08:00",
"actualTimeOfBerthing": "2019-10-10T06:50:00+08:00",
"countOfCnr1": 30
"countOfCnr2": 40
}