使用@Validated的Spring验证控制器

时间:2018-06-22 18:25:08

标签: java spring hibernate rest

我有一个像这样的对象:

public class Foo {
  public interface FooValidator{};

  @Null(groups = {FooValidator.class}, message = "Id is null!!!")
  private Integer id;

  @NotEmpty(message = "Description is empty")
  private String description;
}

和类似的控制器:

public class FooController {
  @PutMapping(value = "/{actionItemId}")
  public ResponseEntity bar1(@Validated({Foo.FooValidator.class}) @RequestBody Foo foo) {
      //stuff
  }

  @PostMapping
  public ResponseEntity bar2(@Validated @RequestBody Foo foo) {
      //stuff
  }
}

我的问题是使用bar1方法,它只验证id字段,而不验证描述字段。但是bar2方法可以正常工作,它可以验证描述字段而不是id字段。

如何获取spring的@Validated批注以验证具有适当接口批注和所有其他普通字段(没有注释的字段)的字段。

换句话说,我如何获得bar1方法来同时验证iddescription字段?

1 个答案:

答案 0 :(得分:6)

@Validated批注应在课程级别使用。用来说在类内部进行了一些验证。这意味着它可以与其他验证批注一起使用,这些批注将应用于属性,参数等。我正在发布documentation中的示例:

@Service
@Validated
public class MyBean {

    public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
            Author author) {
        ...
    }

}

如果要验证自定义类,如在示例中对我看来,则应使用@Valid annotation,它将对类的属性应用验证。