龙空技术网

Spring Boot Validating 校验请求参数

程序员杰哥 1086

前言:

当前小伙伴们对“oracle支持的正则表达式”大致比较关切,同学们都想要学习一些“oracle支持的正则表达式”的相关内容。那么小编也在网络上收集了一些有关“oracle支持的正则表达式””的相关文章,希望朋友们能喜欢,朋友们快快来了解一下吧!

目录javax.validation.constraints 介绍开发环境基础示例总结javax.validation.constraints 介绍

javax.validation.constraints 包含所有 Bean Validation 提供的约束,又称为内置约束。参考最新的 Java(TM) EE 7 Specification APIs,共提供 13 个注解类:

AssertFalse:被注解的元素必须为 false 或 nullAssertTrue:被注解的元素必须为 true 或 nullDecimalMax(value):被注解的元素必须是一个数字,支持类型包括 BigDecimal、BigInteger、CharSequence、byte、short、int、long 以及对应的包装器类型,但是由于精度问题并不支持 double 和 float,且值必须小于等于指定的最小值,也接受 nullDecimalMin(value):被注解的元素必须是一个数字,支持类型和 DecimalMax 一致,且值必须大于等于指定的最小值,也接受 nullDigits(fraction, integer):被注解的元素必须是一个数字,包括 BigDecimal、BigInteger、CharSequence、byte、short、int、long 以及对应的包装器类型,且值必须在可接受的范围内Future:被注解的元素必须是一个将来的日期或 null,支持类型包括 java.util.Date 和 java.util.CalendarMax(value):被注解的元素必须是一个数字,支持类型和 DecimalMax 一致,且值必须小于等于指定的最大值Min(value):被注解的元素必须是一个数字,支持类型和 DecimalMax 一致,且值必须大于等于指定的最小值NotNull:被注解的元素不能为 nullNull:被注解的元素必须为 nullPast:被注解的元素必须是一个过去的日期,支持类型包括 java.util.Date 和 java.util.CalendarPattern(value):被注解的元素必须符合指定的正则表达式,支持类型 CharSequence,也接受 CharSequence. nullSize(max, min):被注解的元素大小必须在指定的范围内,支持类型包括:CharSequence、Collection、Map、Array开发环境Oracle JDK 1.8.0_201Apache Maven 3.6.0IntelliJ IDEA (Version 2018.3.3)基础示例创建 Spring Boot 工程,参考:IntelliJ IDEA 创建 Spring Boot 工程。生成的 pom 文件如下,注意需要添加 spring-boot-starter-web 和 org.hibernate.validator:hibernate-validator 依赖。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <groupId>tutorial.spring.boot</groupId> <artifactId>spring-boot-validating</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-validating</name> <description>Spring Boot Validating</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
创建实体类(领域模型)。
package tutorial.spring.boot.validating.domain;import javax.validation.constraints.*;import java.util.Date;public class User { @NotNull(message = "姓名不能为空") @Size(min = 2, max = 20, message = "不满足姓名长度要求:2~20") private String name; @NotNull(message = "年龄不能为空") @Max(value = 16, message = "不满足最大年龄16岁") private Integer age; @Min(value = 150, message = "不满足最小身高1米5") private Double height; @Pattern(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "不满足邮箱正则表达式") private String email; @Past(message = "出生日期非法") private Date birth; @AssertTrue(message = "不满足会员要求") private Boolean member; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Double getHeight() { return height; } public void setHeight(Double height) { this.height = height; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Boolean getMember() { return member; } public void setMember(Boolean member) { this.member = member; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + ", email='" + email + '\'' + ", birth=" + birth + ", member=" + member + '}'; }}
编写校验请求的接口。
package tutorial.spring.boot.validating.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.propertyeditors.CustomDateEditor;import org.springframework.validation.BindingResult;import org.springframework.web.bind.ServletRequestDataBinder;import org.springframework.web.bind.annotation.InitBinder;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import tutorial.spring.boot.validating.domain.User;import javax.servlet.http.HttpServletRequest;import javax.validation.Valid;import java.text.SimpleDateFormat;import java.util.Date;@RestController@RequestMapping("/")public class UserController { private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class); @InitBinder protected void init(HttpServletRequest request, ServletRequestDataBinder binder) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); format.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(format, false)); } @PostMapping public String validateUser(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { bindingResult.getAllErrors().forEach(error -> LOGGER.error(error.getDefaultMessage())); return "User is invalid: " + user; } return "User is valid: " + user; }}

注意:@InitBinder 注解的 init 方法是用来处理 java.util.Date 类型转换的(String 转 Date)。

启动后使用 Postman 测试。

控制台打印日志如下:

2019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 出生日期非法2019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 不满足邮箱正则表达式2019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 不满足最大年龄16岁2019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 不满足会员要求2019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 不满足最小身高1米52019-04-23 21:09:20.362 ERROR 13380 --- [nio-8080-exec-2] t.s.b.v.controller.UserController : 不满足姓名长度要求:2~20
总结
源码:

标签: #oracle支持的正则表达式