如果username
字段不能为null
,长度必须介于4到64个字符之间,并且与regexp [A-Za-z0-9]+
匹配,则当username
字段为空时,错误消息仅为:期望的结果是must not be null AND length must be between 4 and 64 characters AND must match "[A-Za-z0-9]+"
。
初始设置:
@NotNull
@Length(min = 4, max = 64)
@Pattern(regexp = "[A-Za-z0-9]+")
String username;
我还尝试了:
@NotNull(message = """
{jakarta.validation.constraints.NotNull.message}
AND {org.hibernate.validator.constraints.Length.message}
AND {jakarta.validation.constraints.Pattern.message}""")
@Length(min = 4, max = 64)
@Pattern(regexp = "[A-Za-z0-9]+")
String username;
但后者的结果是:
ConstraintViolationImpl{
interpolatedMessage='must not be null AND length must be between {min} and {max} AND must match "{regexp}"',
propertyPath=username, rootBeanClass=class app.User,
messageTemplate='{jakarta.validation.constraints.NotNull.message} AND {org.hibernate.validator.constraints.Length.message} AND {jakarta.validation.constraints.Pattern.message}'}
未访问约束(min
,max
,regexp
)的值。如何在错误消息中呈现这些约束的实际值?
1条答案
按热度按时间vjrehmav1#
大多数约束注解,包括
@Length
和@Pattern
,都将null
视为有效输入,这就是为什么仅仅使用这些注解无法得到所需结果的原因。幸运的是,通过引入一个新的约束注解,可以很容易地完成您想要的任务:
这是用约束进行注解的,这意味着在选中此注解时将应用这些约束。
消息仍将包含占位符
{min}
等,因为这些不是此约束本身的属性。您可以通过两种方式解决此问题:1.不要使用模板,而是对消息进行硬编码
1.将这些属性也添加到注解中,并告诉Bean验证框架将这些属性用于其他注解:
现在您需要做的就是将
username
字段上的注解替换为@ValidUsername
。