JSR303参数校验
在进行web开发时,对于前端发送的参数,需要进行合法性验证,虽然前端也会进行验证,但是用户仍然可以使用postman等工具或者手动拼接url等方式绕过验证,因此后端也需要验证
要验证参数,可以使用JSR303校验机制,他适用于大多数验证场景
基本使用
使用JSR303校验,首先需要导入对应的starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
然后在实体类的字段上添加校验注解,并且可以使用注解的message属性指定错误信息
@Data
public class Person {
@NotNull(message = "名字不能为空")
String name;
@NotBlank(message = "地址不能为空")
String address;
@Pattern(regexp = "^[1]([3-9])[0-9]{9}$", message = "请填写正确的手机号")
String phone;
}
常用注解
常用的校验注解有以下这些,覆盖了大多数的校验场景
validator内置注解:
-
@Null:被注释的元素必须为null
-
@NotNull:被注释的元素必须不为null
-
@AssertTrue:被注释的元素必须为true
-
@AssertFalse:被注释的元素必须为false
-
@Min(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
-
@Max(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
-
@DecimalMin(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
-
@DecimalMax(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
-
@Size(max, min):被注释的元素的大小必须在指定的范围内
-
@Digits (integer, fraction):被注释的元素必须是一个数字,其值必须在可接受的范围内
-
@Past:被注释的元素必须是一个过去的日期
-
@Future:被注释的元素必须是一个将来的日期
-
@Pattern(value):被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的注解:
-
@Email:被注释的元素必须是电子邮箱地址
-
@Length:被注释的字符串的大小必须在指定的范围内
-
@NotEmpty:被注释的字符串的必须非空
-
@Range:被注释的元素必须在合适的范围内
-
@NotBlank:验证字符串非null,且长度必须大于0
@NotNull,@NotEmpty和@NotBlank
关于@NotNull
,@NotEmpty
和@NotBlank
之间的区别如以下
@NotNull
适用于任何类型,被标注的元素必须不能为null@NotEmpty
适用于String类型,Map类型或者数组,不能为null,且长度必须大于0@NotBlank
只能用于String类型,不能为null,且调用trim()后,长度必须大于0
添加完需要的校验注解之后,在请求处理方法中的接收的请求参数上添加@Validated
注解,即可开启校验功能
@RestController
public class MyController {
@RequestMapping("/check"