不使用 Jacksonized 反序列化 Builder 类

问题描述 投票:0回答:1

我可以使用 @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
的实例(不存在像默认构造函数这样的创建者):抽象类型需要映射到具体类型、具有自定义反序列化器或包含其他类型信息。

jackson lombok
1个回答
0
投票

尝试在 AgeClass 中添加 @NoArgsConstructor 或也称为默认/空构造函数。 至于反序列化,使用空构造函数。你在Person类中使用过它,但在AgeClass中检查一次

© www.soinside.com 2019 - 2024. All rights reserved.