抽象类上的构建器不能被@Jacksonized(构建器永远不会被使用)

Cap*_*rco 1 java jboss jackson lombok wildfly

我有两个类OAuth2TokenCachedOAuth2Token ,它们扩展了一个名为AbstractOAuth2Token的类。

AbstractOAuth2Token.java

@SuperBuilder
@Jacksonized
@JsonSubTypes({
        @JsonSubTypes.Type(value = OAuth2Token.class),
})
@Getter
@Setter
@ToString
public abstract class AbstractOAuth2Token {
    @JsonProperty("access_token")
    private String accessToken;

    @JsonProperty("token_type")
    private String tokenType;
}
Run Code Online (Sandbox Code Playgroud)

OAuth2Token.java

@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
@JsonTypeName("OAuth2Token")
@Jacksonized
public class OAuth2Token extends AbstractOAuth2Token {
    @JsonProperty("expires_in")
    private int expiresIn;
}
Run Code Online (Sandbox Code Playgroud)

CachedOAuth2Token.java

@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
public class CachedOAuth2Token extends AbstractOAuth2Token {
    private LocalDateTime expirationDate;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是我的 Maven 项目没有构建,因为AbstractOAuth2Token.java: Builders on abstract classes cannot be @Jacksonized (the builder would never be used).

即使代码按预期工作,如果AbstractOAuth2Token不是抽象的,那么我也可以使用构建器创建它的实例,这确实不是我想要的。它的构造函数是protected 的,所以没有问题。

我的想法是,我希望AbstractOAuth2Token是抽象的,而又不会失去子级的任何功能。我是 Lombok 的粉丝,所以我希望能够使用自动生成的构建器,但与 Jackson 一起使用。

这是一个 Wildfly 11 项目,版本为 Lombok 1.18.16

我该如何解决这个问题?

Jan*_*eke 6

不要添加@Jacksonized到您的abstract基类中。非@Jacksonized @SuperBuilders 与 s 兼容@Jacksonized @SuperBuilder。由于 Jackson 永远不会AbstractOAuth2Token直接使用 的构建器,因此无需为 Jackson 显式配置它。