Проверка JSR-303 с пользовательским сообщением - PullRequest
4 голосов
/ 21 апреля 2011

Я использую Spring 3.0.5-RELEASE с валидацией стиля JSR-303 и валидатором Hibernate 4.1.0-Final. Мой модельный класс выглядит примерно так:

public class Model {
    @Max(value=10,message="give a lower value")
    Integer n;
}

И это передается как параметр запроса в сервлете mvc пружины с привязкой. Таким образом, запрос будет выглядеть примерно так:

http://localhost:8080/path?n=10

То, что я хочу, - это возможность настроить сообщение об ошибке при наличии исключения несоответствия типов, например,

http://localhost:8080/path?n=somestring

Что приводит к очень длинному сообщению по умолчанию, которое я хочу заменить.

Я перепробовал практически все конфигурации, описанные в Интернете, и ни одна из них, похоже, не работает. Кто-нибудь знает, что такое правильная конфигурация?

В частности, что мне нужно в моем mvc-servlet.xml? Что мне нужно в моем файле messages.properties? Имеет ли файл message.properties магическое имя, чтобы hibernate-validator нашел его?

В моем mvc-servlet.xml я безуспешно использовал следующее:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="messages" />

И файл messages.properties в src / main / resources (а также в src / main / webapp / WEB-INF) ...

Я пробовал всевозможные комбинации в messages.properties даже для простого переопределения, скажем, сообщений @NotEmpty, и даже это не работает для меня.

Ответы [ 4 ]

8 голосов
/ 25 апреля 2011

Сообщения об ошибках должны помещаться в файл с именем ValidationMessages.properties. Просто поместите это где-нибудь в свой путь к классу перед спящими банками.

Например, если у вас есть файл ValidationMessages.properties, который содержит следующие свойства:

email_invalid_error_message=Sorry you entered an invalid email address
email_blank_error_message=Please enter an email address

Тогда у вас может быть доменный объект со следующими ограничениями:

public class DomainObject{ 
...
@Email(message = "{email_invalid_error_message}")
@NotNull(message = "{email_blank_error_essage}")
@Column(unique = true, nullable = false)
String primaryEmail;
...
}
4 голосов
/ 20 апреля 2012

Я нашел ответ на этот вопрос в другом вопросе, и он работал для меня: spring 3.0 MVC, кажется, игнорирует messages.properties

Смущающая меня часть, поскольку я новичокв Spring, я ожидал, что смогу поместить сообщение в ValidationMessages.properties.Однако эта ошибка происходит во время привязки, до проверки.Поэтому вместо использования ValidationMessages.properties используйте свой обычный файл ResourceBundle messages.properties.

Поместите это в файл ?? - servlet.xml:

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

Поместите подобные строки в свойфайл messages.properties.

typeMismatch.myRequest.amount=Amount should be a number.
methodInvocation.myRequest.amount=Amount should be a number.

В этом примере myRequest - это модель моей формы, а сумма - это свойство в этой форме.typeMismatch и methodInvocation предопределены и соответствуют исключениям связывания / преобразования, подобным тому, который вы, похоже, получаете.Мне было трудно найти хорошую документацию для них или список значений, но я обнаружил, что они соответствуют константам ERROR_CODE в некоторых исключениях Spring.http://static.springsource.org/spring/docs/2.5.x/api/constant-values.html#org.springframework.beans.MethodInvocationException.ERROR_CODE

Я поместил свой файл messages.properties для этого проекта в корень моей исходной папки, который поместил его в корень моего пути к классам вместе с ValidationMessages.properties.

2 голосов
/ 25 июня 2011

То, что я хочу, - это возможность настроить сообщение об ошибке, когда есть исключение несоответствия типов, например,

Как я понимаю, это сообщения генерируются Spring MVC, а не Hibernate Validator. Я предлагаю добавить следующую строку в файл messages.properties:

typeMismatch.java.lang.Integer=Must specify an integer value
0 голосов
/ 07 февраля 2014

Вопрос касается сообщений об ошибках привязки данных, а не сообщений об ошибках валидации.Здесь есть адекватный ответ .

...