首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lombok的lombok.copyableAnnotations不使用杰克逊注解

Lombok的lombok.copyableAnnotations不使用杰克逊注解
EN

Stack Overflow用户
提问于 2019-06-13 00:53:24
回答 1查看 8.7K关注 0票数 4

我试图利用Lombok的新copyableAnnotations特性,以便将杰克逊注释(如@JsonIgnore@JsonValue )复制到生成的getter/wither方法中。这个博客似乎建议这样做是可行的:https://www.thecuriousdev.org/lombok-builder-with-jackson/。然而,当我尝试这样做的时候,我只得到了"error: not不适用于这种声明“(指向我的value字段)。为什么这不起作用,我怎样才能使它起作用?也许我误解了这个特性应该如何工作。我用的是lombok 1.18.8

model.java:

代码语言:javascript
复制
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:

代码语言:javascript
复制
config.stopBubbling = true

lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonIgnore
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonValue
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-19 20:54:25

为什么这不起作用…?

@JsonValue注释只允许在方法声明和其他注释类型的声明中使用;因此,不管有没有Lombok,您都不能将它放在字段上。(如果您查看它的Javadoc,就会发现它是用@Target(value={ANNOTATION_TYPE,METHOD})注释的。)

好消息是,@JsonValue只适用于getter方法(而不是setter方法、构建器方法等),而且每个类只能使用一个getter方法,所以手动创建一个getter并不是什么大事:

代码语言:javascript
复制
    @NotNull
    private Long value;

    @JsonValue
    public Long getValue() {
        return value;
    }

如果您真的不喜欢这样做,那么可以使用Lombok的实验性onMethod特性:

代码语言:javascript
复制
    @NotNull
    @Getter(onMethod=@__({@JsonValue}))
    private Long value;

除了在实验中(因此,它可能会在Lombok和/或Java的未来版本中更改或消失)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56572054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档