@Valid 与 @Validated的使用

两者的区别这里不做介绍,要了解请自行google。主要写下之前用到时踩过的坑

  • 对于对象的校验,通过@Valid就可以,校验对象可以定义为一下形式
public class Item{
@NotBlank
private String name;
@Min(value = 0)
private int age;
@Valid
@NotEmpty
private List<Prop> props;  
}

用法如下:

    @PostMapping("/test")
    public TestResponse test(@Valid @RequestBody Item item) {
       .....
    }
  • 对于传入参数为基本类型,需要在controller加上Validated,用法如下
@RestController
@RequestMapping("/api/v1/test")
@Validated
public class TestController {
    ....

    @PutMapping("/{userName}/update/age")
    public void updateAge(@PathVariable String userName,
            @Min(value = 1) @RequestParam("age") Integer age) {
             .....
    } 
}

对于上面的代码,有一点需要注意,参数为基本类型需要校验时,@RequestParam 是不能省略的,不然参数是无法传到后台,而且通过swagger调用时,会显示该参数的类型为body类型。




上一篇:性能极致优化!ZStack Cloud云平台获华为鲲鹏Validated认证


下一篇:@Validated 和 @Valid 联合使用,完成service层参数校验