Я пытаюсь проверить входной параметр в Controller с помощью специального валидатора, а затем использую BindingResult для получения результатов проверки. Сначала я сделал ConstraintValidator и @interface "ValidatorCust" , чтобы вызвать мою собственную проверку. Он работает как шарм с атрибутами модели. Поэтому очень удобно и лаконично проверять ошибки только с результатом привязки:
@PostMapping()
public String save (@Valid @ModelAttribute("goal")Goal goal
,BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ERROR_TEMPLATE;
}
Но я застрял с тем, как проверить входной параметр в контроллере.
Проверка прошла успешно, и мой ограничение работает правильно, но в дальнейшем оно не работает должным образом: я получаю javax.validation.ConstraintViolationException
с правильным результатом проверки, и затем приложения останавливаются без какой-либо возможности просто проверить результат Binding.
@PostMapping()
public String save (@ModelAttribute("user") User user
//, @Validated @Size(min=3) @RequestParam (required = false) String newPassword
, @RequestParam (required = false) @Valid @ValidatorCust String newPassword
, RedirectAttributes redirect
, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
...
}
После большого чтения Я понял , что могу использовать @ExceptionHandler для переопределения этого, но это многословно и не так удобно по сравнению с проверкой BindingResult. Другой способ, который я предполагаю, это просто создать экземпляр ValidatorFactory , Validator , а затем явно выполнить проверку внутри кода контроллера (как я понимаю, явное использование валидатора Spring здесь почти то же самое).
Вопрос: есть ли способ использовать Binding Result с проверкой входных параметров (без привязки к модели)? А если нет, то какой путь для меня лучше?