验证bean的多个字段时出现错误消息

时间:2013-12-20 18:16:24

标签: java bean-validation hibernate-validator

当我将电子邮件设置为空字符串(“”)时,我使用组序列来防止电子邮件字段同时显示两条错误消息。如果我不使用组序列,它将显示“需要电子邮件”和“电子邮件格式错误。”

然后我在使用组序列后遇到了另一个问题。我在金额字段上设置了一个空字符串(“”),并在电子邮件字段中设置了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;
}

2 个答案:

答案 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;
    }
}
相关问题