Как использовать @NotNull? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть приложение Spring Boot, использующее Джексона.Я не использую Джерси, просто обычную Spring MVC.У меня есть класс запроса Wrapper:

public class WrapperRequest {
   @NotNull
   private final Object obj; // some object that corresponds with a JSON object
   @JsonCreator
   public WrapperRequest(@JsonProperty("wrapper") final Object obj) {
     this.obj = obj;
   }
   public Object getObj() {return obj}
}

JSON для этого будет выглядеть следующим образом:

 {
  "wrapper":{ 
    //Object data
  } 
 }

@NotNull из javax не работает, как я ожидал.Я хочу, чтобы это работало так: если потребитель отправляет JSON с такой опечаткой, как:

 {
  "wrapperr":{ 
    //Object data
  } 
 }

Джексон не будет отображать мой класс-обертку, потому что ключ в JSON не соответствует JsonProperty, т. Е. («обертка») (так что Object будет иметь значение null, а затем я получу NPE позже, если я попытаюсь взаимодействовать с Object. Я неправильно использую Джексона? т.е. Джексон отображает вещи, о которых он знает, а остальное равно нулю или я не используюправильно пометить @NotNull?

1 Ответ

0 голосов
/ 28 ноября 2018

Джексон не знает аннотации Bean Validation, такие как @NotNull.Для конкретного случая «null» вы можете пометить параметр конструктора как @JsonProperty(required = true).В более общем смысле вы можете использовать @NotNull для свойства, как вы это сделали, и пометить параметр контроллера MVC значением @Valid (что не приведет к сбою десериализации, но заставит Spring MVC вернуть 400, если проверка не пройдена).

Обратите внимание, что вас также может заинтересовать функция UNWRAP_ROOT_VALUE, которая позволит вам исключить необходимость использования класса-оболочки в данном конкретном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...