Springboot请求参数的Bean验证

时间:2019-06-24 19:17:08

标签: java spring-boot

我有一个用例,其中我们要在REST控制器中传递多个参数,并且必须对参数进行验证以确保其不为空,并进行一些自定义验证。此外,对于某些参数,startswith,endswith支持过滤器选项。我能够验证第一个过滤器级别的参数,但无法使其适用于下一个过滤器级别。例如:查询字符串是filter.firstname,并且它是可选的startswith和endswith支持的。 有人可以通过提供一些建议来帮助我,当有人为非空值传递filter.firstname或filter.firstname.startswith时如何验证参数吗?

这是Controller的示例代码。

 @GetMapping()
    public CustomerResponseData findCustomers(@Valid FilterCustomer filter, HttpServletRequest request)


public class FilterCustomer {

    @Valid
    private FilterCustomerCriteria filter;

}


public class FilterCustomerCriteria {

    @NotBlank
    private String firstname;

    @NotBlank
    private String lastname;
}


public class FilterCustomerFinerCriteria {

    @NotBlank
    private String startswith;

    @NotBlank
    private String endswith;
}```

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,您会说验证框架在某些字段上没有自定义验证逻辑的注释(@NotBlank不够)。

在这种情况下,您始终可以创建自己的自定义验证器,以实现验证逻辑。

Here是指向如何执行此操作的示例的链接, 但回顾一下:

  • 您必须实现一个实现javax.validation.ConstraintValidator的类,并在其public boolean isValid方法中添加验证逻辑

  • 然后创建一个自定义注释(例如@NotBlank but your own one) and set among other things a meta-annotation @ Constraint(validatedBy = {YourValidator.class})`

然后像其他任何验证注释一样使用此注释