我试图利用Lombok的新copyableAnnotations特性,以便将杰克逊注释(如@JsonIgnore和@JsonValue )复制到生成的getter/wither方法中。这个博客似乎建议这样做是可行的:https://www.thecuriousdev.org/lombok-builder-with-jackson/。然而,当我尝试这样做的时候,我只得到了"error: not不适用于这种声明“(指向我的value字段)。为什么这不起作用,我怎样才能使它起作用?也许我误解了这个特性应该如何工作。我用的是lombok 1.18.8
model.java:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Value
public class BrandId implements ValueObject<Long> {
@JsonCreator
public static BrandId of(final Long value) {
return new BrandId(value);
}
@NotNull
@JsonValue
private Long value;
}lombok.config:
config.stopBubbling = true
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonIgnore
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonValue发布于 2019-07-19 20:54:25
为什么这不起作用…?
@JsonValue注释只允许在方法声明和其他注释类型的声明中使用;因此,不管有没有Lombok,您都不能将它放在字段上。(如果您查看它的Javadoc,就会发现它是用@Target(value={ANNOTATION_TYPE,METHOD})注释的。)
好消息是,@JsonValue只适用于getter方法(而不是setter方法、构建器方法等),而且每个类只能使用一个getter方法,所以手动创建一个getter并不是什么大事:
@NotNull
private Long value;
@JsonValue
public Long getValue() {
return value;
}如果您真的不喜欢这样做,那么可以使用Lombok的实验性onMethod特性:
@NotNull
@Getter(onMethod=@__({@JsonValue}))
private Long value;除了在实验中(因此,它可能会在Lombok和/或Java的未来版本中更改或消失)。
https://stackoverflow.com/questions/56572054
复制相似问题