Java 抽象类上的生成器不能@Jacksonized(该生成器永远不会被使用)
我有两个类OAuth2Token和CachedOAuth2Token,它们扩展了一个名为AbstractOAuth2Token的类 AbstractOAuth2Token.javaJava 抽象类上的生成器不能@Jacksonized(该生成器永远不会被使用),java,jboss,jackson,wildfly,lombok,Java,Jboss,Jackson,Wildfly,Lombok,我有两个类OAuth2Token和CachedOAuth2Token,它们扩展了一个名为AbstractOAuth2Token的类 AbstractOAuth2Token.java @SuperBuilder @Jacksonized @JsonSubTypes({ @JsonSubTypes.Type(value = OAuth2Token.class), }) @Getter @Setter @ToString public abstract class AbstractOA
@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;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
@JsonTypeName("OAuth2Token")
@Jacksonized
public class OAuth2Token extends AbstractOAuth2Token {
@JsonProperty("expires_in")
private int expiresIn;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
public class CachedOAuth2Token extends AbstractOAuth2Token {
private LocalDateTime expirationDate;
}
OAuth2Token.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;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
@JsonTypeName("OAuth2Token")
@Jacksonized
public class OAuth2Token extends AbstractOAuth2Token {
@JsonProperty("expires_in")
private int expiresIn;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
public class CachedOAuth2Token extends AbstractOAuth2Token {
private LocalDateTime expirationDate;
}
CachedOAuth2Token.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;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
@JsonTypeName("OAuth2Token")
@Jacksonized
public class OAuth2Token extends AbstractOAuth2Token {
@JsonProperty("expires_in")
private int expiresIn;
}
@Getter
@Setter
@SuperBuilder
@ToString(callSuper = true)
public class CachedOAuth2Token extends AbstractOAuth2Token {
private LocalDateTime expirationDate;
}
不幸的是,我的Maven项目没有生成,因为AbstractOAuth2Token.java:抽象类上的构建器不能@Jacksonized(该构建器永远不会被使用)。
如果AbstractOAuth2Token不是抽象的,那么即使代码按预期工作,我也能够使用构建器创建它的实例,这确实不是我想要的。它的构造函数是受保护的,所以没有问题
我的想法是,我想让抽象化的OAuth2变得抽象,而不会失去孩子们的任何功能。我是Lombok的粉丝,所以我希望能够与Jackson一起使用自动生成的生成器
这是一个Wildfly 11项目,包含Lombok 1.18.16
如何解决此问题?不要将
@Jacksonized
添加到抽象
基类中。非@Jacksonized
@SuperBuilder
s与@Jacksonized
@SuperBuilder
s兼容。由于Jackson永远不会直接使用AbstractOAuth2Token
的生成器,因此不需要为Jackson显式配置它。我将在完成当前任务后尝试此操作,并让您知道结果。我现在测试了它,它可以工作了!谢谢你的帮助:)