Проверка формы Spring для простой формы HTML

#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 as ModelAttribute ?

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:

Вы можете создать экземпляр объекта модели, заполнить его данными из простой формы и проверить этот объект программно.