【问题标题】:Customize spring validation error自定义 spring 验证错误
【发布时间】:2011-06-15 20:46:05
【问题描述】:

我想自定义spring验证错误

    @NotNull
    @Length(max = 80)
    private String email; 

但我做不到。 下一步是什么?

【问题讨论】:

    标签: spring validation customization bean-validation


    【解决方案1】:

    我假设你指的是 Spring MVC。

    来自以下参考 http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html

    给你-

    您创建一个验证器类 -

    public class UserValidator implements Validator {
    
        public boolean supports(Class candidate) {
            return User.class.isAssignableFrom(candidate);
        }
    
        public void validate(Object obj, Errors errors) {
            ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "required", "Field is required.");
            ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "required", "Field is required.");
        }
    }
    

    在上述字段中输入您想要的任何验证文本。

    在 JSP 中,您将需要以下标记 -

    <tr>
        <td>First Name:</td>
        <td><form:input path="firstName" /></td>
        <!-- Show errors for firstName field -->
        <td><form:errors path="firstName" /></td>
    </tr>
    

    这样firstName 的任何验证错误都会被打印出来。

    【讨论】:

    • 我正在使用 @NotNull 之类的注释验证。那么Spring jar中的消息存储在哪里?我想我需要编辑它们
    • @apache-fan 我对你的回答投了反对票,因为 OP 说的是现代 JSR303 风格的验证,而不是旧的 spring-specific。
    【解决方案2】:

    JSR 303 default message interpolation algorithm 允许您通过提供名为 ValidationMessages 的资源包来自定义消息。在类路径中创建一个ValidationMessages.properties 文件,其中包含:

    javax.validation.constraints.NotNull.message=CUSTOM NOT NULL MESSAGE
    javax.validation.constraints.Size.message=CUSTOM SIZE MESSAGE
    

    这会更改@Size 约束的默认消息,因此您应该使用@Size 约束而不是Hibernate 特定的@Length 约束。

    您可以更改特定约束实例的消息,而不是更改所有约束的默认消息。在约束上设置message 属性:

    @NotNull(message = "{email.notnull}")
    private String email;
    

    并将消息添加到ValidationMessages.properties 文件中:

    email.notnull=E-mail address is required
    

    【讨论】:

    • 我认为值得在此处添加的侧边栏是您可以获得大小的最小值和最大值,例如javax.validation.constraints.Size.message=Length must be between {min} and {max} characters
    • 我如何使用这个属性文件进行国际化? ValidationMessages_.properties ?
    • @Chin Huang,如果 {min/max] 的值可以动态变化怎么办?可以指定为消息参数{最小值为{provided_at_runtime}},其中provided_at_runtime 不引用注释属性
    • 如何将颜色改为红色?
    • @Gonçalo,是的,似乎是这样。检查docs.oracle.com/javaee/6/tutorial/doc/gkahi.html
    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2018-05-07
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多