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文档中阅读有关这些组约束的更多信息。