Spring REST Controller принимает произвольные элементы в теле запроса

Я выполняю вызов PUT для обновления существующей сущности и отправляю следующее тело запроса:

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<campaign xmlns:xlink = "http://www.w3.org/1999/xlink">
    <aaaa>123</aaaa>
</campaign>

Сервер отвечает 200 OK, хотя определенно нет свойства «aaaa» в классе POJO, которому сопоставлен ответ. Отладка показывает, что в контроллер передается полностью пустой экземпляр POJO.

Как я могу заставить Spring пожаловаться на это? У нас были пользователи, которые не могли понять, почему обновление не работает, и они просто неправильно написали имя свойства - и не понимали, что сделали ошибку, поскольку получили 200 OK.

Могу я как-нибудь использовать для этого BindingResult? Изменение моего метода контроллера на что-то вроде этого не работает:

public RsCampaign updateCampaign(@Validated @RequestBody RsCampaign rsCampaign, BindingResult bindingResult, ...

Затем Spring жалуется:

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!

Этот вопрос здесь похож, но мне не помогает: @RequestBody не ограничивается типом POJO, а BindingResult всегда имеет ошибки false

если тело неверно, не должен ли сервер просто возвращать HTTP-400?

Pijotrek 29.05.2018 11:29

Да, пожалуйста! :)

Tom 29.05.2018 11:34

Используйте @Valid вместо @Validated, также каждое поле в RsCampaign должно содержать аннотации проверки, такие как @NotEmpty и т. д.

Afridi 29.05.2018 12:21

Я по-прежнему получаю то же исключение (заменил «@ Validated» на «@ Valid» и аннотировал поле в RsCampaign с помощью «@ NotEmpty»)

Tom 29.05.2018 13:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
72
0

Другие вопросы по теме