- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试利用 Lombok 的新 copyableAnnotations
功能,以便将 @JsonIgnore
和 @JsonValue
等 Jackson 注释复制到生成的 getter/wither 方法。这个博客似乎表明这应该有效:https://www.thecuriousdev.org/lombok-builder-with-jackson/ 。但是,当我尝试这样做时,我只是得到“错误:注释类型不适用于这种声明”(指向我的 value
字段)。为什么这不起作用以及如何使其起作用?也许我误解了这个功能应该如何工作。我正在使用 lombok 1.18.8。
模型.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
最佳答案
Why is this not working […] ?
@JsonValue
注解仅允许在方法声明和其他注解类型的声明上使用;所以,无论有没有 Lombok,你都不能把它放在一个字段上。 (如果您查看 its Javadoc ,您会发现它带有 @Target(value={ANNOTATION_TYPE,METHOD})
注释。)
好消息是,@JsonValue
只适用于getter方法(不适用于setter方法、builder方法等),而且每个类只能有一个,所以并不是很大只需要手动创建一个 getter:
@NotNull
private Long value;
@JsonValue
public Long getValue() {
return value;
}
如果你真的不喜欢这个,那么你可以使用 Lombok 的实验性 onMethod
功能:
@NotNull
@Getter(onMethod=@__({@JsonValue}))
private Long value;
这与上面的内容等效,只是处于实验阶段(因此它可能会在 Lombok 和/或 Java 的 future 版本中更改或消失)。
关于java - Lombok 的 lombok.copyableAnnotations 不适用于 Jackson 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56572054/
我是一名优秀的程序员,十分优秀!