我可以使用 @Jacksonized
成功反序列化我的构建器类@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Jacksonized
public class Person {
Private String firstName;
Private String lastName;
@JsonDeserialize(contentAs=AgeClassImpl1.class)
Private AgeClass age; // AgeClass interface has 2 implementations but I always to use impl1
Public static Person create(final String fN, final String lN, final AgeClass age) {
PersonBuilder builder = PersonBuilder.builder()
.firstName(fN)
.lastName(lN)
.age(age);
builder.build()
}
}
但是,我需要摆脱
@Jacksonized
。为了达到和@Jacksonized
一样的效果,我手动添加了注释,如下图:
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonDeserialize(builder=Person.PersonBuilder.class)
public class Person {
Private String firstName;
Private String lastName;
@JsonDeserialize(contentAs=AgeClassImpl1.class)
Private AgeClass age; // AgeClass interface has 2 implementations but I always to use impl1
@JsonPOJOBuilder(withPrefix="")
public static class PersonBuilder {}
Public static Person create(final String fN, final String lN, final AgeClass age) {
PersonBuilder builder = PersonBuilder.builder()
.firstName(fN)
.lastName(lN)
.age(age);
builder.build()
}
}
出现错误:
InvalidDefinitionException:无法构造
的实例(不存在像默认构造函数这样的创建者):抽象类型需要映射到具体类型、具有自定义反序列化器或包含其他类型信息。AgeClass
尝试在 AgeClass 中添加 @NoArgsConstructor 或也称为默认/空构造函数。 至于反序列化,使用空构造函数。你在Person类中使用过它,但在AgeClass中检查一次