весеннее целочисленное подтверждение аннотации mvc - PullRequest
7 голосов
/ 03 ноября 2011

У меня есть объект.

public class MyObject
{
   ....
   @Column(name = "a_number") @NotNull @NumberFormat(style = Style.NUMBER) @Min(1)
   private Integer aNumber;
   ...
   //getters and setters
}

В моем контроллере у меня есть аннотация @Valid для моего объекта. У меня есть проверка, работающая со всеми моими другими полями в классе (все их строки), кроме этого числа. Если я ввожу число из моей формы, оно будет работать нормально, и если я нарушу @Min (1), это также даст мне правильную ошибку проверки. Моя проблема, однако, заключается в том, что если вы введете строку вместо числа, она выдаст исключение NumberFormatException.

Я видел много примеров Integer и проверки, но никто не учитывает, если вы вводите строку в публикуемую форму. Нужно ли делать проверку еще где? Javascript? Я хотел бы решение, которое соответствует остальной части весенней проверки, чтобы я мог использовать это в других классах. Я просто хотел бы, чтобы ошибка указала, что она должна быть числовой. Также я попытался использовать аннотацию @Pattern, но, видимо, это только для строк.

Предложения

Ответы [ 2 ]

9 голосов
/ 03 ноября 2011

Вы можете добавить следующее к вашему файлу, который управляет вашими сообщениями об ошибках (это общие, которые он ищет в случае несоответствия типов:

typeMismatch.commandObjectName.aNumber=You have entered an invalid number for ...
typeMismatch.aNumber=You have entered an invalid number for ...
typeMismatch.java.lang.Integer=You have input a non-numeric value into a field expecting a number...
typeMismatch=You have entered incorrect data on this page.  Please fix (Catches all not found)
4 голосов
/ 20 января 2016

Для тех, кто не понял, вот что нужно сделать в spring 4.2.0. Создайте имя файла messages.properties в папке WEB-INF > classes. И поместите вышеупомянутые сообщения о несоответствии типов в этот файл. В конфигурации Spring или в файле servlet.xml создайте следующий компонент.

<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages"></beans:property>
</beans:bean>

И для вашего атрибута модели, такого как private Integer aNumber; в вопросе, наряду с другими правилами проверки, это правило также применяется для преобразования несоответствия типов. Вы получите желаемое сообщение в этом.

<form:errors path="aNumber"></form:errors>

Надеюсь, это поможет другим.

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