ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@RequestBody与@Validated一起使用校验失效

2021-08-19 15:33:42  阅读:316  来源: 互联网

标签:ResponseData ApiModelProperty 校验 private RequestBody addRole 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修饰的实体类的属性就会产生这个异常。

 



标签:ResponseData,ApiModelProperty,校验,private,RequestBody,addRole,Validated
来源: https://www.cnblogs.com/shisanye/p/15162021.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有