7

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

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但没有注释的类?还是通过继承以某种方式可能?

4

1 回答 1

11

简短回答:使用验证组

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

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

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

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

public interface SomeCriteria {}

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

于 2016-02-29T16:21:35.093 回答