SpringBoot参数校验

参考博客:

SpringBoot 参数校验的方法www.cnblogs.com/mooba/p/11276062.html

实现整理如下:

一、为什么要进行参数校验?

虽然在前端做校验,可以通过前端禁止输入的方法来使参数合法。但应该考虑到可以跳过前端,直接像后端发送请求,如果后端未做参数校验的话,会使未经校验的参数经过service层来到dao层直到数据库,造成十分严重的后果。最好的结果是查不出数据,严重一点就是报错,如果这些没有被校验的参数中包含了恶意代码,那就可能导致更严重的后果。

前端做参数校验是为了用户体验,后端做参数校验是为了安全

二、SpringBoot的参数校验

controller层参数校验流程如下:

https://pic2.zhimg.com/80/v2-a56fd25f62529e970b84c495000501bd_1440w.webp

SpringBoot的参数校验可分为两类:单个参数校验、实体类参数校验

创建SpringBoot项目CheckOut,0:

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

首先将常用校验注解罗列如下,以便查看:

注解 说明
@AssertFalse 所注解的元素必须是Boolean类型,且值为false
@AssertTrue 所注解的元素必须是Boolean类型,且值为true
@DecimalMax 所注解的元素必须是数字,且值小于等于给定的值
@DecimalMin 所注解的元素必须是数字,且值大于等于给定的值
@Digits 所注解的元素必须是数字,且值必须是指定的位数
@Future 所注解的元素必须是将来某个日期
@Max 所注解的元素必须是数字,且值小于等于给定的值
@Min 所注解的元素必须是数字,且值小于等于给定的值
@Range 所注解的元素需在指定范围区间内
@NotNul 所注解的元素值不能为null(注意:postman测试时,无法发送null的参数
@NotBlank 所注解的元素值有内容
@Null 所注解的元素值为null
@Past 所注解的元素必须是某个过去的日期
@PastOrPresent 所注解的元素必须是过去某个或现在日期
@Pattern 所注解的元素必须满足给定的正则表达式
@Size 所注解的元素必须是String、集合或数组,且长度大小需保证在给定范围之内
@Email 所注解的元素需满足Email格式
@NotEmpty 加了@NotEmpty的String类、Collection、Map、数组,是不能为null或者长度为0的(String Collection Map的isEmpty()方法)
@NotBlank @NotBlank只用于String,不能为null且trim()之后size>0

SpringBoot中常用的校验注解为@Validated和@Valid,它们的区别参考博客:

https://xiaojin21cen.blog.csdn.net/article/details/90572980?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.controlxiaojin21cen.blog.csdn.net/article/details/90572980?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control![img](https://link.zhihu.com/?target=https%3A//xiaojin21cen.blog.csdn.net/article/details/90572980%3Futm_medium%3Ddistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control%26depth_1-utm_source%3Ddistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control)