@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)
Ответ 4
При использовании JDK версии 8:
// @Getter([email protected]__({@Id, @Column(name="unique-id")})) //JDK7
// @Setter([email protected]__(@Max(10000))) //JDK7
@Getter(onMethod_={@Id, @Column(name="unique-id")}) //JDK8
@Setter([email protected](10000)) //JDK8
Источник: https://projectlombok.org/features/experimental/onX