我有一个用例,其中我们要在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;
}```
答案 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})`
然后像其他任何验证注释一样使用此注释