Проверка тела запроса И параметр запроса в 1 шаг? - PullRequest
2 голосов
/ 06 февраля 2020

вопрос к проверке положительных вызовов к конечной точке REST с использованием весенней загрузки и javax.validation (не пружинная проверка).

У вас есть следующий метод в ресурсе:

@PutMapping(...)
public Response getResult(@RequestBody @Valid myBody, @PathVariable @MyIdValidation long id) {

}

Когда я вызываю метод, myBody проверяется, и я получаю MethodArgumentNotValidException в моем обработчике исключений. Но параметр id получает , а не проверено!

Только если myBody допустимо, id также проверяется.

Единственное решение, которое я нашел, это не используйте @Valid, а выполняйте проверку тела самостоятельно.

Есть ли лучшие решения?

TIA Kibu

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Я не думаю, что это выполнимо самой платформой Spring MVC, потому что каркас обрабатывает @RequestBody и другие подобные @RequestParam или @PathVariable по-разному, используя различные компоненты. Кроме того, обе части должны быть отключены, потому что вы можете не захотеть проверять все аргументы метода.

@RequestBody обрабатывается org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor, и оттуда вызываются проверки, а для параметров или проверок переменных пути - org.springframework.validation.beanvalidation.MethodValidationInterceptor.

Так что, на мой взгляд, аргументы метода Метод контроллера обрабатывается один за другим и отключается в logi c, поэтому эти проверки нельзя объединить.

0 голосов
/ 21 февраля 2020

Я приложил некоторые усилия для решения этой проблемы и запустил проект на github

Возможно выполнить проверку за один раз, но вам нужен другой подход. Проверьте проект и протестируйте его.

Kibu

...