我正在尝试利用Lombok的新copyableAnnotations
功能,以便将@JsonIgnore
和@JsonValue
之类的Jackson注释复制到生成的getter / wither方法中。该博客似乎建议这样做:https://www.thecuriousdev.org/lombok-builder-with-jackson/。但是,当我尝试这样做时,我只会得到“错误:不适用于这种声明的注释类型”(指向我的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
答案 0 :(得分:1)
为什么这不起作用[…]?
仅在方法声明和其他注释类型的声明上允许使用@JsonValue
注释;因此,无论是否使用龙目岛,您都无法将其放在字段上。 (如果您查看its Javadoc,则会看到它带有@Target(value={ANNOTATION_TYPE,METHOD})
的注释。)
好消息是@JsonValue
仅适用于getter方法(不适用于setter方法,builder方法等),每个类只能有一个,因此手动进行并没有什么大不了的创建一个吸气剂:
@NotNull
private Long value;
@JsonValue
public Long getValue() {
return value;
}
如果您真的不喜欢它,则可以使用Lombok的实验性onMethod
功能:
@NotNull
@Getter(onMethod=@__({@JsonValue}))
private Long value;
与上述内容相同,只是处于实验阶段(因此在将来的Lombok和/或Java版本中可能会更改或消失)。