SpringBoot(五):JSR303校验
一、什么是JSR303校验
JSR,是Java Specification Requests的缩写,意思是Java规范提案,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。
JCP(Java Community Process)是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。
也就是说JSR303其实就是一种Java规范,它叫做Bean Validation,意思就是对Bean进行验证。
二、JSR303的校验类型
内置注解:
@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扩展注解:
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内
三、SpringBoot中JSR303校验的简单使用
1.依赖导入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2.注解使用
Bean中使用@Validated注解,在对应的属性上使用JSR303中的注解,示例如下:
package com.jms.config; import com.sun.istack.internal.NotNull; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Email; import javax.validation.constraints.Min; @Validated @Component @ConfigurationProperties(prefix = "jsr303") public class TestJSR303 { @NotNull private String name; @Min(0) private int age; @Email private String email; public TestJSR303() { } public TestJSR303(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "TestJSR303{" + "name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + '}'; } }
yaml文件内容:
jsr303:
name: jsr
age: -1
email: aaa
3.测试:
package com.jms; import com.jms.config.TestJSR303; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot02ConfigApplicationTests { private TestJSR303 testConfig; @Autowired public void setTestConfig(TestJSR303 testConfig) { this.testConfig = testConfig; } @Test void contextLoads() { System.out.println(testConfig); } }
测试结果如下: