当前位置: 首页 > news >正文

7.参数校验

在controller和service进行前端传参校验,保证存到数据库的数据是正确的

1.引入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

这里无需指定版本,因为sprongboot已经引入了对应版本的依赖。
在这里插入图片描述

2.指定校验规则

  • 如果方法的参数是 Bean 类型,则在方法参数上添加 @Valid注解,并在 Bean 类上添加参数校验的注解。
    @Valid注解支持嵌套,@Validated支持分组校验
    在这里插入图片描述

在这里插入图片描述

  • 如果方法的参数是普通类型,则在方法参数上直接添加参数校验的注解。
    如果是单一参数的校验,必须要在类上面添加@Validated注解
    在这里插入图片描述
    Service 层校验也需要加,Service 可能会被别的 Service 进行调用,也会存在参数不正确的情况,所以必须进行参数校验。

3.拦截异常

拦截异常是为了返回固定数据格式给前端

    /*** 处理 SpringMVC 参数校验不正确  post json校验*/@ExceptionHandler(MethodArgumentNotValidException.class)public CommonResult<?> methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) {log.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex);FieldError fieldError = ex.getBindingResult().getFieldError();assert fieldError != null; // 断言,避免告警return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage()));}/*** 处理 SpringMVC 参数绑定不正确,本质上也是通过 Validator 校验 post表单校验*/@ExceptionHandler(BindException.class)public CommonResult<?> bindExceptionHandler(BindException ex) {log.warn("[handleBindException]", ex);FieldError fieldError = ex.getFieldError();assert fieldError != null; // 断言,避免告警return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage()));}/*** 处理 Validator 校验不通过产生的异常 单个校验*/@ExceptionHandler(value = ConstraintViolationException.class)public CommonResult<?> constraintViolationExceptionHandler(ConstraintViolationException ex) {log.warn("[constraintViolationExceptionHandler]", ex);ConstraintViolation<?> constraintViolation = ex.getConstraintViolations().iterator().next();return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", constraintViolation.getMessage()));}
  • 普通参数(非 java bean)校验出错时抛出ConstraintViolationException异常
  • 请求体绑定到java bean上,且校验参数失败时抛出 MethodArgumentNotValidException异常
  • 表单绑定到 java bean 出错时,会抛出 BindException 异常
    post请求的两种方式,一种是通过表单,一种是通过json
    这样,参数校验就完成了。

4.自定义校验规则

1.自定义注解

在这里插入图片描述

2.新增校验器

在这里插入图片描述

3.在需要校验处添加注解

在这里插入图片描述

5.分组校验

http://www.lryc.cn/news/62351.html

相关文章:

  • nginx简单介绍
  • 美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚
  • QML中【预计符号】和【Unknown Component M300】的红色警告解决方法
  • 聊聊「低代码」的实践之路
  • (一)服务发现组件 Eureka
  • 学会笔记本电脑录屏快捷键,轻松实现录屏!
  • ( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】
  • 算法训练Day40:343. 整数拆分 96.不同的二叉搜索树
  • 设计模式及代码
  • 9.java程序员必知必会类库之加密库
  • C技能树:for循环:九九乘法表
  • Win10老是蓝屏收集错误信息重启无效怎么办?
  • Redis入门学习笔记【五】Redis在分布式环境下常见的应用场景
  • Python ZIpFile 解惑:GBK 编码与乱码现象
  • 【LeetCode】213. 打家劫舍 II
  • 从初识RabbitMQ到安装了解
  • MySQL(六)-字符串函数的使用解析
  • Zookeeper集群搭建
  • 【计算机视觉 | 目标检测】OVD:Open-Vocabulary Object Detection 论文工作总结(共八篇)
  • C++入门基础知识[博客园长期更新......]
  • ( “树” 之 BST) 501. 二叉搜索树中的众数 ——【Leetcode每日一题】
  • openharmony内核中不一样的双向链表
  • 大文件删除不在回收站里怎么找回
  • Ubuntu22.04部署Pytorch2.0深度学习环境
  • php的面试集结(会持续更新)
  • 谁在成为产业经济发展的推车人?
  • 上海无纺布制造商【盈兹】申请纳斯达克IPO上市,募资1100万美元
  • Build an SAP Fiori App(一)后面更新中
  • 关于GNSS技术介绍(二)
  • 拿到新的服务器必做的五件事(详细流程,开发必看)