有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

然后,在使用组序列之后,我遇到了另一个问题。我在amount字段上设置了一个空字符串(“”),并设置了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) 个答案

  1. # 1 楼答案

    马库斯:谢谢你回复我。我必须使用这个答案字段,因为我没有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;
        }
    }
    
  2. # 2 楼答案

    @NotBlank@Email都将“”作为无效值共享。您可以考虑添加某种转换服务,将“”转换为null,并用^ {CD4}}替换^ {< CD1> }约束。Null不触发@Email,但仅触发@NotNull。在这种情况下,不需要组

    关于第二个问题,组javax.validation.groups.Default中的每个默认值都有一个约束。在组ValidInput.class中显式设置@Email约束