有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有两个类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;
}

OAuth2Token。java

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

CachedOAuth2Token。java

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

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

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

我的想法是,我想让抽象化的OAuth2Token在不失去孩子们任何功能的情况下变得抽象。我是Lombok的粉丝,所以我希望能够与Jackson一起使用自动生成的生成器

这是一个Wildfly 11项目,包含Lombok 1.18.16

我该如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    不要将@Jacksonized添加到abstract基类中。非@Jacksonized{}与@Jacksonized{}兼容。由于Jackson永远不会直接使用AbstractOAuth2Token的生成器,因此不需要为Jackson显式配置它