web-dev-qa-db-ja.com

@Getterアノテーション付きの@JsonIgnore

オブジェクトをシリアル化するときにこのJsonIgnoreを使用する必要がありますが、逆シリアル化中はJsonIgnoreアノテーションを無視する必要があるため、オブジェクトのフィールドをnullにしないでください。

@Getter
@Setter
public class User {

    private userName;

    @JsonIgnore
    private password;
}

passwordのゲッターでJsonIgnoreを定義するだけで、パスワードがシリアル化されないようにすることができますが、そのためには、不要なゲッターのものを明示的に定義する必要があります。どんなアイデアでもお願いします、どんな助けでもありがたいです。

21
Prateek Jain

生成されたgetterメソッドに@JsonIgnoreを配置するには、onMethod = @__(@JsonIgnore)を使用できます。これにより、特定のアノテーションが付いたゲッターが生成されます。詳細については http://projectlombok.org/features/GetterSetter.html を確認してください

@Getter
@Setter
public class User {

    private userName;

    @Getter(onMethod = @__( @JsonIgnore ))
    @Setter
    private password;
}
39
Sebastian

最近、Jackson-Annotation 2.9.0とLombok 1.18.2を使用して同じ問題が発生しました

これは私のために働いたものです:

_@Getter
@Setter
public class User {

    @JsonIgnore
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
_

したがって、基本的にアノテーション@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)を追加すると、プロパティは(セッターを使用して)逆シリアル化のためにのみ書き込まれ、シリアライズ時に(ゲッターを使用して)読み取られません。

7
damato

これはかなり明白かもしれませんが、私は以前にこの解決策を考えていなかった多くの時間を失いました:

_@Getter
@Setter
public class User {

    private userName;

    @Setter
    private password;

    @JsonIgnore
    public getPassword() { return password; }
}
_

セバスチャンが言ったように、@__( @JsonIgnore )はこの問題を解決できますが、onX Lombok機能(@__())を使用すると、たとえばjavadoc生成が壊れるなどの副作用が生じることがあります。

2
ZooMMX

JDKバージョン8では、以下を使用します。

//  @Getter(onMethod=@__({@Id, @Column(name="unique-id")})) //JDK7
//  @Setter(onParam=@__(@Max(10000))) //JDK7
 @Getter(onMethod_={@Id, @Column(name="unique-id")}) //JDK8
 @Setter(onParam_=@Max(10000)) //JDK8

ソース: https://projectlombok.org/features/experimental/onX

1
Ali786