Проверка Spring 3 (JSR-303) @Min - PullRequest
       25

Проверка Spring 3 (JSR-303) @Min

2 голосов
/ 17 августа 2011

Я пытаюсь проверить поле ввода, которое должно содержать (если не пусто) натуральное число (т. Е. Положительное ненулевое целое число: 1, 2, 3, ....)

Я использую следующие аннотации:

@Digits(integer=10, fraction=0)
@Min(value = 1)
private Long number;

(это лучший способ описать мое ограничение ???)

Когда я отправляю число, такое как 1,5, я получаю ВАЛИДАЦИОННОЕ СООБЩЕНИЕ , что хорошо.Однако, когда я отправляю ввод, такой как -1, я не получаю СООБЩЕНИЯ О ВАЛИДАЦИИ.Что мне не хватает?

Спасибо!

PS Поскольку мои (другие) аннотации Hibernate для этого поля были на получателе поля, я просто перенесу эти две аннотации также на получателя (вместо того, чтобы быть на фактическом поле).Не помогло.

РЕДАКТИРОВАТЬ

Я только что прочитал, мне может понадобиться добавить <mvc:annotation-driven /> в мой XML.Я сделал это, однако при запуске сервера я получаю исключение:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/mvc] Offending resource: ServletContext resource [/WEB-INF/dispatcher-servlet.xml]

Я не уверен, что это означает, и если мне действительно нужно (????) эта аннотация-driven tag ... также, если мне нужен этот управляемый аннотациями тег в моем xml, почему другие мои аннотации (включая одну из проверочных аннотаций) работают без него?

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Вам нужен тег <mvc:annotation-driven />.Вот что сообщает Spring Web MVC для активации проверки JSR-303.

Несколько вещей для проверки:

1) Убедитесь, что вы объявили префикс mvc пространства имен в вашей конфигурации dispatcher-servlet.xml.Например (здесь используется Spring 3):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    ...
</beans>

2) Также убедитесь, что на вашем пути к классам есть JAR-файл Spring Web MVC.JAR содержит обработчик пространства имен, который знает, как обрабатывать пространство имен конфигурации MVC.

3) Убедитесь, что Hibernate Validator находится в пути к классам.Spring нуждается в этом для выполнения проверки.

Что касается вашего вопроса о том, почему другие ваши аннотации работали: <mvc:annotation-driven> не отвечает за все аннотации, только некоторые из них.Одна вещь, за которую он отвечает, - это валидации JSR-303, как отмечено выше.

Что касается вашей другой валидации, я думаю, что это не было валидацией, которая работала вообще.Вместо этого, когда вы пытаетесь поместить 1.5 в Long, Spring не может этого сделать, и вы, вероятно, получаете какое-то сообщение об ошибке.Я не думаю, что вам вообще нужна аннотация @Digits.Если вы удалите его, я думаю, вы все равно получите сообщение.

1 голос
/ 17 августа 2011

Вы должны дополнительно явно указать Spring для проверки вашего bean-компонента в точке привязки с использованием аннотации @ Valid , можете ли вы подтвердить, что вы делаете это. Я предполагаю, что ошибка, которую вы получаете с 1.5, так как ввод просто потому, что 1.5 не может быть помещен в поле Long и является исключением привязки, а не проверкой.

0 голосов
/ 17 августа 2011

Если это целое число, почему бы не сделать его Integer?Также должно быть @Min(1).

...