这是我的@ Pattern.List:
@NotNull
@Pattern.List({
@Pattern(regexp="[A-Z][a-z]+\\s[A-Z][a-z]+", message="Name contains invalid characters."),
@Pattern(regexp="[A-Z][a-z]+", message="Name contains invalid characters.")
})
public String getName() {
return name;
}
该字符串是北达科他州。
我承认我不是正则表达式中的佼佼者而且我是新手,但不应该这样做吗?
如果删除@Pattern注释,它会起作用。
这是错误:
Caused by: javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details.
答案 0 :(得分:3)
您似乎期望在提供@Pattern.List
时,该值应与列表中的至少一个模式匹配。但是这是错误的。该值必须与列表的任何一个模式匹配。在“北达科他州”的情况下,只有第一个模式匹配,但第二个模式不匹配。因此,您将继续看到此约束违规错误。
@Pattern.List
仅应用于无法用单个模式表示的模式,或者每个模式都需要传达消息(例如对各种类型的字符进行复杂的密码匹配)。
在这种特殊情况下,您只需将正则表达式简化为一个模式,即将第二个单词放在(...)?
中,将其指定为可选。
@NotNull
@Pattern(regexp="[A-Z][a-z]+(\\s[A-Z][a-z]+)?", message="Name contains invalid characters.")
public String getName() {
return name;
}