@JsonIgnore с аннотацией @Getter

Могу ли я использовать @JsonIgnore с аннотацией @Getter от lombok без явного определения getter, потому что я должен использовать этот JsonIgnore при сериализации объекта, но при десериализации, аннотацию JsonIgnore следует игнорировать, поэтому поле в моем объекте не должно быть null.

@Getter
@Setter
public class User {

    private userName;

    @JsonIgnore
    private password;
}

Я знаю, просто определив JsonIgnore на getter password, я могу запретить сериализацию моего пароля, но для этого мне нужно явно определить объект getter, который я не хочу. Любая идея, пожалуйста, Любая помощь будет оценена.

Ответ 1

Чтобы поставить @JsonIgnore на сгенерированный метод getter, вы можете использовать onMethod = @__ (@JsonIgnore). Это создаст геттер с конкретной аннотацией. Подробнее http://projectlombok.org/features/GetterSetter.html

@Getter
@Setter
public class User {

    private userName;

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

Ответ 2

Это может быть совершенно очевидно, но я потерял много времени, не думая об этом решении раньше:

@Getter
@Setter
public class User {

    private userName;

    @Setter
    private password;

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

Как сказал Себастьян, @__( @JsonIgnore ) может решить эту проблему, но иногда использование функции onX Lombok (@__()) может иметь побочные эффекты, например, разбиение генерации javadoc.

Ответ 3

Недавно у меня была такая же проблема с использованием джексон-аннотации 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) означает, что свойство может быть записано только для десериализации (с использованием setter), но не будет читаться при сериализации (с использованием getter)