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

时间:2011-08-16 20:38:04

标签: java bean-validation hibernate-validator

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

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

但是,如果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;

我已经尝试过@Max和@Min而他们没有做我想做的事。任何意见都将非常感谢!

3 个答案:

答案 0 :(得分:45)

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

@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验证API定义的@Size {/ 1}}。

答案 1 :(得分:8)

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

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

答案 2 :(得分:7)

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