zoukankan      html  css  js  c++  java
  • @RequestBody与@Validated一起使用校验失效

    请求参数多层嵌套时与注解@RequestBody一起使用时就会产生 校验失效问题

     1. 请看代码

     @PostMapping("/addRole")
        public ResponseData<Boolean> 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 List<RoleParam> roleParamList;
     
        @ApiModelProperty("参数集合")
        private List<DramaDmParam> dmParams;
     
    }

    3.深一层就不写了

    4.上述写法 校验不会生效

    解决校验问题

    5.

            1.看代码

     @ApiOperation("描述信息")
        @PostMapping("/addRole")
        public ResponseData<Boolean> addRole(@RequestBody @Valid RoleListParam roleParam) {
            return ResponseData.success(dramaService.addRole(roleParam));
        }

            2.嵌套数据中

     
        @ApiModelProperty("id")
        @NotNull(message = "id不能为空")
        private Long dramaId;
     
     
        @ApiModelProperty("参数")
        @Valid
        private List<RoleParam> roleParamList;
     
        @ApiModelProperty("参数集合")
        @Valid
        private List<DramaDmParam> dmParams;

            3.这样写校验生效了需要我们在异常以拦截器中写自定义拦截类

    @ExceptionHandler(MethodArgumentNotValidException.class)
        public ResponseData<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
            StringBuilder msg = new StringBuilder();
            List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
            for (ObjectError allError : allErrors) {
                msg.append(allError.getDefaultMessage());
            }
            return ResponseData.fail(ResponseCode.PARAM_INVALIDATE.getCode(), msg.toString());
        }

    注意:

    BindException是@Validation单独使用校验失败时产生的异常
    MethodArgumentNotValidException是@RequestBody和@Validated配合时产生的异常,比如在传参时如果前端的json数据里部分缺失@RequestBody修饰的实体类的属性就会产生这个异常。


  • 相关阅读:
    Confluence 6 删除垃圾内容
    Confluence 6 在 Apache 或者系统级别阻止垃圾
    Confluence 6 避免和清理垃圾
    Confluence 6 配置 简易信息聚合(RSS)
    Confluence 6 匿名访问远程 API
    Confluence 6 使用电子邮件可见
    Confluence 6 配置 XSRF 保护
    Confluence 6 为登录失败编辑,禁用和配置验证码
    Confluence 6 为登录失败配置使用验证码
    Confluence 6 为搜索引擎隐藏外部链接
  • 原文地址:https://www.cnblogs.com/shisanye/p/15162021.html
Copyright © 2011-2022 走看看