参考博客:
SpringBoot 参数校验的方法www.cnblogs.com/mooba/p/11276062.html
实现整理如下:
虽然在前端做校验,可以通过前端禁止输入的方法来使参数合法。但应该考虑到可以跳过前端,直接像后端发送请求,如果后端未做参数校验的话,会使未经校验的参数经过service层来到dao层直到数据库,造成十分严重的后果。最好的结果是查不出数据,严重一点就是报错,如果这些没有被校验的参数中包含了恶意代码,那就可能导致更严重的后果。
前端做参数校验是为了用户体验,后端做参数校验是为了安全
controller层参数校验流程如下:
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格式 | |
@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)