Spring Boot验证 - 如何仅从字段返回一个错误

时间:2018-06-08 17:36:45

标签: spring validation

我想创建应用程序以验证用户提供的数据。这是一个例子。

Word.java

@Data
class Word {    
    @NotBlank(message = "Please, enter your text")
    @Size(min = 3, message = "Your text is too short")
    @Pattern(regexp = "^[A-Z]+[a-z]+$", message = "Your text is incorrect")
    private String text;
}

我想验证text字段,我只能查看一个错误,例如:

输入{text: ""}
预期产出应为Please, enter your text
但实际输出是:Please, enter your text, Your text is too short, Your text is incorrect

输入{text: "ab"}
预期产出应为Your text is too short
但实际输出是:Your text is too short, Your text is incorrect

我尝试使用@ReportAsSingleViolation注释进行自定义验证器,但没有任何更改。

你知道吗,怎么解决?谢谢你的所有答案。

修改
有时错误的顺序不正确,但我不知道为什么。例如

输入{text: ""}
预期产出应为Please, enter your text
但实际输出是:Your text is incorrect, Your text is too short, Please, enter your text

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上,却缺少一些东西。添加椭圆形验证后,您需要实现一个方法,该方法接收您的对象并根据椭圆验证它。

您的示例显示您已完成此操作,但您打印所有这些内容而不是使用不同的案例来抛出不同的例外。

以下是示例 -

public static Set<ConstraintViolation> getOvalViolations(Object obj){

    Validator validator = new Validator();

    Set<ConstraintViolation> violations = new HashSet(validator.validate(obj));

    return violations;
}

这将为您提供一组ConstraintViolation,您可以使用要从列表中抛出的那个。您可以检查每个案例的主要例外并适当地抛出它们。

希望这有帮助!