@RequestBody与@Validated一起使用校验失效
请求参数多层嵌套时与注解@RequestBody一起使用时就会产生 校验失效问题
1. 请看代码
@PostMapping("/addRole")
public ResponseData addRole(@RequestBody @Validated RoleListParam roleParam) {
return ResponseData.success(dramaService.addRole(roleParam));
}
2.参数嵌套
@ApiModel(value = "描述信息") @Data @Accessors(chain = true) public class RoleListParam { @ApiModelProperty("id") @NotNull(message = "id不能为空") private Long id; @ApiModelProperty("参数") private ListroleParamList; @ApiModelProperty("参数集合") private List dmParams; }
3.深一层就不写了
4.上述写法 校验不会生效
解决校验问题
5.
1.看代码
@ApiOperation("描述信息")
@PostMapping("/addRole")
public ResponseData addRole(@RequestBody @Valid RoleListParam roleParam) {
return ResponseData.success(dramaService.addRole(roleParam));
}
2.嵌套数据中
@ApiModelProperty("id") @NotNull(message = "id不能为空") private Long dramaId; @ApiModelProperty("参数") @Valid private ListroleParamList; @ApiModelProperty("参数集合") @Valid private List dmParams;
3.这样写校验生效了需要我们在异常以拦截器中写自定义拦截类
@ExceptionHandler(MethodArgumentNotValidException.class) public ResponseData
注意:
BindException是@Validation单独使用校验失败时产生的异常
MethodArgumentNotValidException是@RequestBody和@Validated配合时产生的异常,比如在传参时如果前端的json数据里部分缺失@RequestBody修饰的实体类的属性就会产生这个异常。