Spring Rest Controller:如何有选择地关闭validation

在我的控制器中,我有一个创建实体的方法

import javax.validation.Valid; ... @RestController public class Controller { @RequestMapping(method = RequestMethod.POST) public ResponseEntity create(@Valid @RequestBody RequestDTO requestDTO) { ... 

 import org.hibernate.validator.constraints.NotEmpty; ... public class RequestDTO @NotEmpty // (1) private String field1; //other fields, getters and setters. 

我想添加一个控制器方法

 update(@Valid @RequestBody RequestDTO requestDTO) 

但是在这种方法中,应该允许field1为空或为空,即行

 @NotEmpty // (1) 

RequestDTO应该被忽略。

我怎样才能做到这一点? 我是否必须编写一个与RequestDTO完全相同的类,但没有注释? 或者通过inheritance以某种方式可能?

简短回答:使用validation组

 @NotEmpty(groups = SomeCriteria.class) private String field1; 

并在方法处理程序参数中引用您想要的组:

 public ResponseEntity create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO) 

在上面的示例中,将应用SomeCriteria组中的validation,而将忽略其他validation。 通常,这些validation组被定义为空接口:

 public interface SomeCriteria {} 

您可以在Hibernate Validator文档中阅读有关这些组约束的更多信息。