abstract 类 上的构建器不能被@Jacksonized(构建器永远不会被使用)
Builders on abstract classes cannot be @Jacksonized (the builder would never be used)
我有两个 classes OAuth2Token 和 CachedOAuth2Token 扩展了一个 class 称为 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;
}
缓存OAuth2Token.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 不是抽象的,即使代码按预期工作,我也可以使用构建器创建它的实例,这确实不是什么我想。它的构造函数是 protected,所以没问题。
我的想法是,我希望 AbstractOAuth2Token 是抽象的,而不丢失 children 中的任何功能。我是 Lombok 的粉丝,所以我希望能够与 Jackson 一起使用自动生成的构建器。
这是一个使用 Lombok 1.18.16 的 Wildfly 11 项目
我该如何解决这个问题?
不要将 @Jacksonized
添加到您的 abstract
基础 class。非 @Jacksonized
@SuperBuilder
与 @Jacksonized
@SuperBuilder
兼容。由于 Jackson 永远不会直接使用 AbstractOAuth2Token
的构建器,因此无需为 Jackson 显式配置它。
我有两个 classes OAuth2Token 和 CachedOAuth2Token 扩展了一个 class 称为 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;
}
缓存OAuth2Token.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 不是抽象的,即使代码按预期工作,我也可以使用构建器创建它的实例,这确实不是什么我想。它的构造函数是 protected,所以没问题。
我的想法是,我希望 AbstractOAuth2Token 是抽象的,而不丢失 children 中的任何功能。我是 Lombok 的粉丝,所以我希望能够与 Jackson 一起使用自动生成的构建器。
这是一个使用 Lombok 1.18.16 的 Wildfly 11 项目
我该如何解决这个问题?
不要将 @Jacksonized
添加到您的 abstract
基础 class。非 @Jacksonized
@SuperBuilder
与 @Jacksonized
@SuperBuilder
兼容。由于 Jackson 永远不会直接使用 AbstractOAuth2Token
的构建器,因此无需为 Jackson 显式配置它。