Не получается исключение при передаче неверного тела запроса json для остальных API в весенней загрузке - PullRequest
0 голосов
/ 26 июня 2019

Я создал один API отдыха в Spring-boot, проблема в том, что я принимаю 4 параметра в качестве аргумента requestbody в качестве объекта JSON.

Теперь, если я передаю объект JSON с 5 параметрами, которые все еще вызывают мой API, исключение утверждения не возникает при сериализации объекта JSON. У меня есть один класс dto, как показано ниже с конструктором

public class testDto{
   @NotNull(message = "fistName can not be null.")
   private String fistName;
   @NotNull(message = "lastName can not be null.")
   private String lastName;
   private String nickName;

   public testDto() {
    }

    public testDto(@NotNull(message = "fistName can not be null.") final String fistName ,@NotNull(message = "lastName can not be null.") final String lastName , final String nickName){
      super();
      this.fistName = fistName;
      this.lastName = lastName;
      this.nickName = nickName;
    }
}

Мои данные , как показано ниже,

@PostMapping(path ={ "/api/v1/user"}, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> saveUser(
            @Valid @RequestBody(required = true) final testDto dto) throws Exception {
}

Теперь при вызове моего API я передаю тело запроса , как показано ниже

{
      "fistName" : "abc",
      "lastName" : "xyz",
      "nickName" : "pqr",
      "age" : 25
}

Теперь, когда я передаю параметр age и вызываю API, мой API все еще работает, а не выдает исключение для Никакого конструктора не найдено, так как я передал age, который не является членом моего класса dto.

Ожидаемый результат: не разрешать вызов API Фактический результат: Позвольте мне вызвать API

Я также пытался с объявлением исключения утверждения и исключением привязки, но безуспешно.

также установить свойство

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

1 Ответ

0 голосов
/ 26 июня 2019

Spring Boot использует Джексона для сопоставления полезной нагрузки JSON с экземпляром вашего testDto класса. По умолчанию Джексон настроен на игнорирование записей в JSON, которые он не может сопоставить с DTO . Это следует принципу устойчивости или закону Постеля, поскольку это также известно.

Вы можете настроить сбой Jackson, если он не может сопоставить запись в JSON со свойством в DTO, добавив следующую строку в файл application.properties вашего приложения в src/main/resources:

spring.jackson.deserialization.fail-on-unknown-properties=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...