为了项目能正常运行,避免不了对参数的大量校验,这些校验的代码大量且无脑,虽然一般要求前端也要对参数进行校验,但是前端的参数校验是为了用户体验,后端的参数校验是为了安全。毕竟后端是最后的防守线。
那有没有简单的方式实现同样的效果呢? 必须有啊!只要有问题就花时间去了解去解决,对症下药就好了。总有人会比我们先发现问题并提出解决方案的。
javax.validation包
Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已经经历了三个版本 。
大概是SpringBoot 2.3版本之前是默认集成在 starter-web中,可无需添加依赖。
如果SpringBoot版本大于2.3或者没有集成javax.validation,在pom.xml中引入以下依赖即可:
<!-- 参数校验 javax.validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
常用的用于参数校验的注解如下:
- @AssertFalse 所注解的元素必须是Boolean类型,且值为false
- @AssertTrue 所注解的元素必须是Boolean类型,且值为true
- @DecimalMax 所注解的元素必须是数字,且值小于等于给定的值
- @DecimalMin 所注解的元素必须是数字,且值大于等于给定的值
- @Digits 所注解的元素必须是数字,且值必须是指定的位数
- @Future 所注解的元素必须是将来某个日期
- @Max 所注解的元素必须是数字,且值小于等于给定的值
- @Min 所注解的元素必须是数字,且值小于等于给定的值
- @Range 所注解的元素需在指定范围区间内
- @NotNull 所注解的元素值不能为null
- @NotBlank 所注解的元素值有内容
- @Null 所注解的元素值为null
- @Past 所注解的元素必须是某个过去的日期
- @PastOrPresent 所注解的元素必须是过去某个或现在日期
- @Pattern 所注解的元素必须满足给定的正则表达式
- @Size 所注解的元素必须是String、集合或数组,且长度大小需保证在给定范围之内
- @Email 所注解的元素需满足Email格式
在实体类中或者接口参数加上对应注解即可
然后需要在controller
方法体添加@Validated
不加@Validated
校验会不起作用