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

jdg4fx2g  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(464)

我有两个类oauth2token和cachedoauth2token,它们扩展了一个名为abstractoauth2token的类。
抽象OAuth2Token.java

  1. @SuperBuilder
  2. @Jacksonized
  3. @JsonSubTypes({
  4. @JsonSubTypes.Type(value = OAuth2Token.class),
  5. })
  6. @Getter
  7. @Setter
  8. @ToString
  9. public abstract class AbstractOAuth2Token {
  10. @JsonProperty("access_token")
  11. private String accessToken;
  12. @JsonProperty("token_type")
  13. private String tokenType;
  14. }

oauth2token.java文件

  1. @Getter
  2. @Setter
  3. @SuperBuilder
  4. @ToString(callSuper = true)
  5. @JsonTypeName("OAuth2Token")
  6. @Jacksonized
  7. public class OAuth2Token extends AbstractOAuth2Token {
  8. @JsonProperty("expires_in")
  9. private int expiresIn;
  10. }

cachedoauth2token.java文件

  1. @Getter
  2. @Setter
  3. @SuperBuilder
  4. @ToString(callSuper = true)
  5. public class CachedOAuth2Token extends AbstractOAuth2Token {
  6. private LocalDateTime expirationDate;
  7. }

不幸的是,我的maven项目没有构建,因为 AbstractOAuth2Token.java: Builders on abstract classes cannot be @Jacksonized (the builder would never be used). 如果abstractoauth2token不是抽象的,那么即使代码按预期工作,我也可以使用构建器创建它的示例,这确实不是我想要的。它的构造函数是受保护的,所以没有问题。
我的想法是让抽象化的OAuth2变得抽象而不丧失孩子们的任何功能。我是Lombok迷,所以我想能够使用自动生成的建设者,但与Jackson一起。
这是一个WildFly11项目,Lombok1.18.16版本
如何解决这个问题?

lx0bsm1f

lx0bsm1f1#

不添加 @Jacksonized 给你的 abstract 基类。非-
@Jacksonized @SuperBuilder 与…兼容
@Jacksonized @SuperBuilder s。因为Jackson永远不会使用 AbstractOAuth2Token 的生成器,无需显式配置它。

相关问题