Java Hibernate验证程序-@Length-如何为最小值和最大值指定单独的消息?

Java Hibernate验证程序-@Length-如何为最小值和最大值指定单独的消息?,java,bean-validation,hibernate-validator,Java,Bean Validation,Hibernate Validator,我在web应用程序中使用Hibernate验证程序进行表单验证。我将@Length注释用于我的字符串属性,如下所示: @Length(min = 5, message = "The field must be at least 5 characters") private String myString; @Length(min = 5, message = "The field must be at least 5 characters") @Length(max = 50, message

我在web应用程序中使用Hibernate验证程序进行表单验证。我将@Length注释用于我的字符串属性,如下所示:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;
@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;
但是,如果字符串超过50个字符,我需要显示不同的消息。有没有一种方法可以使用开箱即用的@Length验证器来实现这一点?我想做的一个例子(编译器不允许我做)如下:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;
@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,但他们没有做我想做的事。任何意见都将不胜感激

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

您可以在一个元素上指定多个
@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验证API定义的,而不是
@Length

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

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

是的,我喜欢这种解决方案,但不幸的是,我有一个要求,必须用单独的消息来实现。你可以创建一个自定义约束,该约束将同时检查最小值和最大值,并为每一个设置单独的消息:这正是我想要的!注意,从Bean Validation 2.0/Hibernate Validator 6开始,您将能够多次指定
@Length
和任何其他约束,而不需要显式的
@List
注释。