Hibernate Validator - @Length - 如何为min和max指定单独的消息?

jav*_*ian 18 java hibernate-validator bean-validation

我在我的网络应用程序中使用Hibernate验证器进行表单验证.我在我的String属性中使用@Length注释,如下所示:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;
Run Code Online (Sandbox Code Playgroud)

但是,如果String超过50个字符,我需要显示不同的消息.有没有办法使用开箱即用的@Length验证器来做到这一点?我想做的一个例子(编译器不会让我)如下:

@Length(min = 5, message = "The field must be at least 5 characters")
@Length(max = 50, message = "The field must be less than 50 characters")
private String myString;
Run Code Online (Sandbox Code Playgroud)

我试过@Max和@Min但他们没有做我想做的事.任何投入将不胜感激!

Gun*_*nar 46

您可以@Length使用内部列表注释(在Bean Validation/Hibernate Validator中为每个约束类型定义)在一个元素上指定多个约束,如下所示:

@List({
    @Length(min = 5, message = "The field must be at least 5 characters"),
    @Length(max = 50, message = "The field must be less than 50 characters")
})
private String myString;
Run Code Online (Sandbox Code Playgroud)

顺便说一句.出于可移植性的原因,我建议更喜欢Bean Validation API定义的@Size@Length.

  • 请注意,从 Bean Validation 2.0 / Hibernate Validator 6 开始,您将能够多次指定 `@Length` 和任何其他约束,而无需显式的 `@List` 注释。 (2认同)

Cha*_*och 9

如果你使用java标准的javax.validation.constraint.Size,你可以用这种方式实现同​​样的目的:

@Size.List ({
    @Size(min=8, message="The field must be at least {min} characters"),
    @Size(max=60, message="The field must be less than {max} characters")
})
private String myString;
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用消息插值来避免对字段大小进行硬编码.


atr*_*ain 7

根据文档,您可以使用@Length(min=, max=)一条消息.然后只需将您的消息更改为"字段必须介于5到50个字符之间"

  • 您可以创建一个自定义约束来检查Min和Max,并为每个提供单独的消息:http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html (2认同)