Spring REST如何以不同的方式验证请求体?

时间:2017-01-27 21:54:48

标签: java spring validation

使用@Valid,我们可以解析请求正文并使用@NotEmpty@Size(min = 5)等注释对其进行验证。有没有办法有多种方法来验证身体?例如,在某些端点上,我想忽略一些验证器(在我的情况下为@NotNull)。

我的想法是创建一个像@ValidUnlessNull这样的自定义注释,但是如何在不必执行@RequestBody工作的情况下实现其解析器(我尝试实现FilterHandlerMethodArgumentResolver)?

2 个答案:

答案 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以使用组提示调用验证。