抽象类上的java构建器不能@Jacksonized(该构建器永远不会被使用)
我有两个类OAuth2Token和CachedOAuth2Token,它们扩展了一个名为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 楼答案
不要将}与}兼容。由于Jackson永远不会直接使用
@Jacksonized
添加到abstract
基类中。非@Jacksonized
{@Jacksonized
{AbstractOAuth2Token
的生成器,因此不需要为Jackson显式配置它