Spring Rest Controller:如何有选择地关闭验证
Spring Rest Controller: how to selectively switch off 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
为空或 null,即行
@NotEmpty // (1)
RequestDTO
的 应该被忽略。
我该怎么做?我是否必须写一个看起来与 RequestDTO
完全相同但没有注释的 class?还是可以通过继承以某种方式实现?
简答:使用验证组:
@NotEmpty(groups = SomeCriteria.class)
private String field1;
并在方法处理程序参数中引用您的目标组:
public ResponseEntity<?> create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO)
在上面的示例中,将应用 SomeCriteria
组中的验证,而其他人将被忽略。通常,这些验证组被定义为空接口:
public interface SomeCriteria {}
您可以在 Hibernate Validator documentation 中阅读有关这些组限制的更多信息。
在我的控制器中,我有一个创建实体的方法
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
为空或 null,即行
@NotEmpty // (1)
RequestDTO
的 应该被忽略。
我该怎么做?我是否必须写一个看起来与 RequestDTO
完全相同但没有注释的 class?还是可以通过继承以某种方式实现?
简答:使用验证组:
@NotEmpty(groups = SomeCriteria.class)
private String field1;
并在方法处理程序参数中引用您的目标组:
public ResponseEntity<?> create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO)
在上面的示例中,将应用 SomeCriteria
组中的验证,而其他人将被忽略。通常,这些验证组被定义为空接口:
public interface SomeCriteria {}
您可以在 Hibernate Validator documentation 中阅读有关这些组限制的更多信息。