20

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

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

但是,如果字符串超过 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;

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

4

3 回答 3

54

您可以@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;

顺便提一句。出于可移植性的原因,我建议首选Bean Validation API 定义的@Size 。@Length

于 2011-08-17T18:27:47.630 回答
13

如果您使用 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;

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

于 2014-03-01T15:23:28.780 回答
8

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

于 2011-08-16T20:42:50.117 回答