开发web项目有时候咱们须要对controller层传过来的参数进行一些基本的校验,好比非空,非null,整数值的范围,字符串的个数,日期,邮箱等等。最多见的就是咱们直接写代码校验,这样之后比较繁琐,并且不够灵活。java
Bean Validation 1.0(JSR-303)是一个校验规范,在Spring Boot项目因为自带了Hibernate validator 5(http://hibernate.org/validator/)实现,因此咱们能够很是方便的使用这个特性 。web
核心的pom依赖:微信
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.1.Final</version> </dependency>
首先,须要咱们声明一个Bean,注入校验器到Spring Boot的运行环境app
@Configuration @EnableAutoConfiguration public class FactoryConfig { final static Logger logger= LoggerFactory.getLogger(FactoryConfig.class); @Bean public MethodValidationPostProcessor methodValidationPostProcessor(){ return new MethodValidationPostProcessor(); } }
校验经常使用的注解以下:学习
@AssertFalse 校验false @AssertTrue 校验true @DecimalMax(value=,inclusive=) 小于等于value, inclusive=true,是小于等于 @DecimalMin(value=,inclusive=) 与上相似 @Max(value=) 小于等于value @Min(value=) 大于等于value @NotNull 检查Null @Past 检查日期 @Pattern(regex=,flag=) 正则 @Size(min=, max=) 字符串,集合,map限制大小 @Valid 对po实体类进行校验
下面看一个使用例子:this
package hello; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; public class PersonForm { //名字不能为空,并且长度必须在2和30之间 @NotNull(message = "名称不能为空") @Size(min=2, max=30, message = "名字长度必须在2和30之间") private String name; //年龄不能为空,并且必须大于等于18岁 @NotNull @Min(18) private Integer age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return "Person(Name: " + this.name + ", Age: " + this.age + ")"; } }
接着看下如何在Controller层使用hibernate
//非实体类参数能够直接使用注解 @GetMapping("/check") @ResponseBody public String check(@Min(0,message = "kpId必须大于等于0") @RequestParam int kpId,@RequestParam int level) { return "ok"; } //实体类注解校验使用@Valid @PostMapping("/") public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "form"; } return "redirect:/results"; }
注意上面的Spring提供的BindingResult是错误结果的一个封装,咱们能够在web页面中经过这个对象拿到详细的错误信息,code
<td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>
总结:orm
经过使用注解来快速检验传入的web参数仍是很是简洁强大的,这里仅仅列举了一小部分的校验的知识,若是想要更深刻的 了解和学习,请参考hibernate官网文档:http://hibernate.org/validator/对象
有什么问题能够扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。