I can successfully deserialize my builder class using @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()
}
}
However, I need to get rid of @Jacksonized. To achieve the same effect as @Jacksonized, I manually added the annotations as shown below:
@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()
}
}
Getting error:
InvalidDefinitionException: Cannot construct instance of
AgeClass(no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information.
Try adding @NoArgsConstructor or also known as default/empty constructor in your AgeClass. As to deserialize, empty constructor is used. You have used it in Person class, but check once in AgeClass