Дополнительно
Весна в MVC - @действующую на список фасоль в остальные службы
Весной обслуживание в MVC остальные (в формате JSON), у меня есть метод контроллера, как этот :
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
Где класс MyBean есть аннотации валидации зерен.
Проверок Дон'т, кажется, чтобы иметь место в этом случае, хотя он хорошо работает и для других контроллеров.
Я Дон'т хотите, чтобы инкапсулировать список в ДТО этого, что бы менять вход с JSON.
Почему нет проверок список бобы ? Какие альтернативы ?
33
9
@Действительное-это в JSR-303 аннотации и JSR-303 применяется для проверки на модели. Значение
Java.утиль.Список не является JavaBean (по данным официальное описание к объектам JavaBean), следовательно, его нельзя проверить непосредственно с помощью портлетов JSR-303 уступчивый валидатор. Это подтверждается двумя наблюдениями.Я отметил важные части информации жирным шрифтом. Данный раздел подразумевает, что для того, для коллекции типа для проверки, оно должно быть инкапсулировано внутри зерен (подразумевается
рассмотрим ситуацию, когда в зернах X содержит поле введите Y
); и далее, что коллекции не могут быть проверены непосредственно (подразумевается собрание уважаемых, различными значениями и, как правило, при обходе поля и свойства также могут быть оформлены с акцентом на поля и свойства).Я образец заявления, что проверочные тесты коллекция с Hibernate и валидатор валидатор Апач бобы. При выполнении тестов на этом образце как
команды mvn чистой тест -Phibernate
(с спящий режим валидатора) икоманды mvn чистой тест -Papache
(для фасоль валидатор), как отказать в подтверждении коллекции, что вроде бы в соответствии со спецификацией. Поскольку валидатор гибернации является эталонной реализацией спецификации JSR-303, этот пример еще раз подтверждает, что коллекции должны быть инкапсулированы в зернах, чтобы быть проверены.С этим прояснилось, я бы сказал, что существует также проблема проектирования в попытке передать коллекцию в метод контроллера напрямую, как это показано в вопрос. Даже если проверки к работе над коллекциями напрямую, метода контроллера, не смогут работать с альтернативными представлениями данных, таких как пользовательские XML, мыло, атом, ЭОД, буферы протокола Google и т. д. которые не отображаются непосредственно в коллекции. Для поддержки этих представлений, регулятор должен принять и вернуть экземпляры объекта. Это потребует инкапсуляция коллекции внутри экземпляра объекта любым способом. Поэтому было бы весьма желательно, чтобы обернуть
список
внутри другого объекта, как и другие ответы предложили.Единственный способ я нашел, чтобы сделать это, чтобы обернуть список, это также означает, что входной сигнал в JSON придется менять.
становится:
и нам также нужны:
Похоже, это также может быть возможным с пользовательским validatior для списков, но я не получил, что далеко еще.
и GT; @действительный аннотация является частью стандарта JSR-303 API для проверки зернах, а не Весна-специфическим конструктом.
Ссылка : http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
С помощью com.Гугл.общие.собираем.ForwardingList
Так что не надо за фантик
вы можете использовать
С помощью фантик ваш формат JSON должен быть изменен на
с этой реализации можно использовать оригинальный формат JSON
Попробовать прямой проверки. Что-то вроде этого:
Реализовать свой собственный валидатор с орг.springframework.проверки.beanvalidation.LocalValidatorFactoryBean как член и называют валидатор для каждого элемента.
Есть элегантный способ фантик вашему запросу в заказ
Ява.утиль.Список
, который действует каксписок
иклассе
. см. здесьЕсли вы Don'т хотите, чтобы написать программу-оболочку для каждого списка у вас есть, вы можете использовать универсальную оболочку:
Я думаю, что лучшим вариантом является, чтобы обернуть список - https://stackoverflow.com/questions/16908689/how-to-validate-request-parameter-if-it-is-not-a-bean-in-spring-mvc
Нет возможности банкоматов, чтобы сказать, что @Valid относится к элементам коллекции.
у меня работает так долго, как вы представить допустимый JSON:-