当我将电子邮件设置为空字符串(“”)时,我使用组序列来防止电子邮件字段同时显示两条错误消息。如果我不使用组序列,它将显示“需要电子邮件”和“电子邮件格式错误。”
然后我在使用组序列后遇到了另一个问题。我在金额字段上设置了一个空字符串(“”),并在电子邮件字段中设置了krchoigmail.com。由于组序列,它仅显示“金额是必需的”错误消息。我需要显示“电子邮件格式错误”。错误信息也是如此。我该如何实现这一目标?我搜索了很多次,但没有找到这个问题的答案。请帮忙。
@NotBlank(message = "{error.req.integer.amount}")
public String getAmount() {
return amount;
}
@NotBlank(message = "{error.req.email}")
@Email(message = "{error.format.email}", groups = ValidInput.class)
public String getEmail() {
return email;
}
答案 0 :(得分:1)
@NotBlank
和@Email
都将“”分享为无效值。您可以考虑添加某种转换服务,将“”转换为Null并将@NotBlank
约束替换为@NotNull
。 Null不会触发@Email
,但仅触发@NotNull
。在这种情况下,不需要组。
关于第二个问题,组javax.validation.groups.Default
中的默认值为约束。您在组@Email
中明确设置了ValidInput.class
约束。
答案 1 :(得分:0)
马库斯:谢谢你回复我。我必须使用这个答案字段,因为我没有50个声誉来写相对评论。确实@NotNull没有触发@Email。我通过编写自定义验证解决了我的问题,但我比自定义验证更喜欢你的答案。你能否给我一些关于为什么@NotBlank触发@Email而@NotNull不是?似乎这种行为使得@NotBlank不那么有用。我用过你的建议而且很有效。我不需要一个小组。谢谢。
@NotNull(message = "{error.req.email}")
@Email(message = "{error.format.email}")
public String getEmail() {
return email;
}
public void setEmail(String email) {
if ((email != null) && email.trim().isEmpty()) {
email = null;
} else {
this.email = email;
}
}