使用@Valid
,我们可以解析请求正文并使用@NotEmpty
,@Size(min = 5)
等注释对其进行验证。有没有办法有多种方法来验证身体?例如,在某些端点上,我想忽略一些验证器(在我的情况下为@NotNull
)。
我的想法是创建一个像@ValidUnlessNull
这样的自定义注释,但是如何在不必执行@RequestBody
工作的情况下实现其解析器(我尝试实现Filter
和HandlerMethodArgumentResolver
)?
答案 0 :(得分:5)
您可以定义自定义验证组,并选择具有@Validated
注释的任何组。
1)定义空接口,将用作验证组标识符:
public interface FirstValidateGroup{}
2)将验证注释绑定到指定的接口(组):
public class Person{
@NotBlank(groups = {FirstValidateGroup.class})
private String firstName;
@NotBlank
private String lastName;
//... getters and setters
}
请注意,您可以为一个属性绑定多个组。
3)使用@Validated
注释选择验证组:
public ResponseEntity<Person> add(@Validated({FirstValidateGroup.class})
@RequestBody Person person){
...
}
现在,只会验证firstName
属性。您可以在@Validated
注释中指定多个组。
答案 1 :(得分:0)
验证组是您的朋友。您只需要为每个端点提供适当的组。 在此处查看我的评论Spring MVC @Valid Validation with custom HandlerMethodArgumentResolver以使用组提示调用验证。