#java #spring #validation #spring-mvc
#java #spring #проверка #spring-mvc
Вопрос:
Мне нужно проверить некоторые простые формы в моем приложении. В этих формах у меня есть один или два входных текста для проверки, поэтому я бы не хотел создавать определенный класс ModelAttribute для каждой формы. Я хотел бы использовать вместо этого обычную форму HTML и использовать @RequestParam
аннотации для обработки параметров POST.
Есть ли способ использовать проверку формы Spring в этой ситуации (без использования атрибута модели) или я должен реализовать объект резервной формы и средство проверки для каждой формы?
Ответ №1:
В настоящее время это невозможно использовать @Valid
для отдельных @RequestParam
и @PathVariable
т. Д. для запуска проверки. Это соответствующий запрос функции в Spring Issue Tracker. Давайте скрестим пальцы для Spring 4.1!
В вашем случае вам придется либо использовать @ModelAttribute
, либо выполнять пользовательскую проверку внутри контроллера (или, возможно, перехватчика Spring, если вы хотите, чтобы одна и та же проверка применялась к нескольким конечным точкам)
Комментарии:
1. Можно ли использовать
Map
asModelAttribute
?2. Вы можете использовать
Map<String,String>
, чтобы заставить Spring MVC предоставить вам все аргументы, но я серьезно сомневаюсь, что проверка будет выполняться на нем
Ответ №2:
Я думаю, вы можете сделать это с помощью аннотации. Вы можете указать для своих параметров аннотацию, например :
- @Size(min = 3, max = 5)
- @NotNull
- @NotEmpty
…
Ответ №3:
Без атрибута модели проверка формы Spring невозможна. Поскольку проверка формы Spring зависит от привязки формы Spring, которая является связью между элементами формы и атрибутом модели. Итак, какой бы маленькой ни была форма, создайте DTO(атрибут модели), привяжите его к форме и выполните проверки.
Ответ №4:
Определенно невозможно использовать API проверки Spring (объект ошибок):
java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply
Ответ №5:
Вы можете создать экземпляр объекта модели, заполнить его данными из простой формы и проверить этот объект программно.