Общая функциональность проверки не реализована в Джексоне, поскольку считается, что она выходит за рамки, см., Например, Джексон - Обязательное свойство? .
И некоторая информация о том, почему аннотация @JsonProperty(required = true)
не работает с полем, можно найти здесь: Джексон @JsonProperty (обязательно = true) не выдает исключение .
Однако есть прием, который может работать для null
& существующие значения значимых полей, но выдают исключение, если поле полностью отсутствует. Создайте конструктор с аннотацией @JsonCreator
(и не создавайте конструктор по умолчанию!), Где используется такая же аннотация @JsonProperty(value = "*field_name*", required = true)
, и он будет выдавать в случае пропуска поля, например:
@Getter @Setter
public class KeyHolder {
private String firstKey;
private String secondKey;
private String thirdKey;
@JsonCreator
public KeyHolder(
@JsonProperty(value = "firstKey", required = true) String firstKey,
@JsonProperty(value = "secondKey", required = true) String secondKey,
@JsonProperty(value = "thirdKey", required = true) String thirdKey) {
this.firstKey = firstKey;
this.secondKey = secondKey;
this.thirdKey = thirdKey;
}
}
Сэти действия:
new ObjectMapper().readValue("{ \"firstKey\": \"val1\", \"secondKey\": \"val2\" }"
, KeyHolder.class);
должны привести к чему-то вроде:
com.fasterxml.jackson.databind.exc.MismatchedInputException: отсутствует обязательное свойство создателя ThirdKey (индекс 2)