Использование результата Binding в Controller для определенного ввода - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь проверить входной параметр в 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 с проверкой входных параметров (без привязки к модели)? А если нет, то какой путь для меня лучше?

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