Lombokで生成されたメソッドに対してアノテーションを設定する

毎回調べているような気がするのでメモ。

Lombok+Jackson(Spring MVCやJerseyなどで使ってたり)を使っている場合に、@JsonIgnoreで一部のフィールドを対象外にしたい場合に、privateなフィールドに設定してもうまく動きません。

Lombokで生成したsetterまたはgetterに設定してあげる必要があり、下記のような書き方をします。(java - @JsonIgnore with @Getter Annotation - Stack Overflowより引用)

@Getter
@Setter
public class User {

    private userName;

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

ちょっと特殊な書き方なので、いつも忘れます…

なお、Lombokで生成されたメソッドに対してアノテーションを指定する方法は、下記の3パターンになります。

  1. 生成されるメソッドに対して: @Setter(onMethod = @__(@ExampleAnnotation))
  2. 生成されるメソッドの引数に対して: @Setter(onParam = @__(@ExampleAnnotation))
  3. 生成されるコンストラクタに対して: @AllArgsConstructor(onConstructor = @__(@ExampleAnnotation))

Lombokのドキュメントだと、下記に記載があります。