开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空,非null,整数值的范围,字符串的个数,日期,邮箱等等。最常见的就是我们直接写代码校验,这样以后比较繁琐,而且不够灵活。
Bean Validation 1.0(JSR-303)是一个校验规范,在Spring Boot项目由于自带了Hibernate validator 5(
http://hibernate.org/validator/)实现,所以我们可以非常方便的使用这个特性 。
核心的pom依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.1.Final</version>
</dependency>
首先,需要我们声明一个Bean,注入校验器到Spring Boot的运行环境
@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实体类进行校验
下面看一个使用例子:
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层使用
//非实体类参数可以直接使用注解
@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页面中通过这个对象拿到详细的错误信息,
<td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>
总结:
通过使用注解来快速检验传入的web参数还是非常简洁强大的,这里仅仅列举了一小部分的校验的知识,如果想要更深入的
了解和学习,请参考hibernate官网文档:
http://hibernate.org/validator/
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
本篇文章将详细介绍如何在 Spring Boot 项目中使用参数校验,包括使用 Bean Validation 1.0(JSR-303)规范和 Hibernate Validator 实现参数校验的方法。 一、Bean Validation 1.0(JSR-303)规范 Bean Validation...
Spring Boot 参数校验 Validation 使用
Bean Validation是Java定义的一套基于注解的数据校验规范。这里简单实现了Spring Boot 参数校验,包括自定义注解,分组校验,全局异常处理等
快速入手 Spring Boot 参数校验
快速入手Spring Boot 参数校验
Spring Boot技术知识点:如何使用@Validated注解来对邮箱字段进行数据校验
Spring Boot 2.x基础教程:JSR-303实现请求参数校验 Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解 Spring Boot 2.x基础教程:Swagger静态文档的生成 Spring Boot 2.x基础教程:找回启动
创建一个基础的 Spring Boot 项目,在 pom.xml 中引入两个重要依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-ldap <groupId>com.unboundid</groupId> ...
Spring Boot参数校验与Lombok使用详解 在Spring Boot中进行参数校验是非常重要的,因为在实际...在Spring Boot中进行参数校验是非常重要的,我们可以使用Lombok来简化代码,并使用Validator来对参数进行合理性校验。
Spring Boot (3) 校验表单重复提交
我们使用了 Deepl AI 翻译,并且对翻译后的内容进行人工逐行校验,从 java 开发者的角度对内容进行优化,保留了一些原汁原味的专业术语,相信这份文档可以让你有不一样的体验。 还有其他优质的 spring/spring-data/...
基于Spring boot + maven,以注解+AOP方式实现的java后端项目接口参数校验框架。迄今为止使用最简单、最容易理解的参数校验方案。博客地址:https://blog.csdn.net/weixin_42686388/article/details/104009771
本文将详细介绍如何在Spring Boot项目中整合Mina来实现串口通信。 首先,我们需要了解Spring Boot的基本架构。Spring Boot的核心特性是自动配置和起步依赖,这使得我们无需编写大量的XML配置文件,只需通过注解就能...
Spring Boot + validation + AOP 请求参数校验 一、validation 校验注解 通用 @Null 被注释的属性必须为 null @NotNull被注释的属性必须不为 null @AssertTrue 被注释的属性必须为 true @AssertFalse 被注释的属性...
Spring Boot 实现通用的接口参数校验 本文介绍了基于 Spring Boot 和 JDK8 编写的一个 AOP,以实现通用的接口参数校验。通过自定义注解实现了参数校验,解决了实体类上添加注解的限制,实现了方法级别的参数校验。 ...
- **导入XML配置**:说明如何在Spring Boot项目中使用XML配置文件。 - **自动配置**: - **逐步替换自动配置**:解释如何根据项目需求逐步覆盖或替换默认的自动配置。 - **禁用特定的自动配置**:提供方法来禁用...
在本教程中,我们将深入探讨如何使用Spring Boot构建一个通用的权限管理项目,重点在于“增删改”操作。Spring Boot作为Java开发的热门框架,以其简洁的配置和快速的开发能力深受开发者喜爱。在权限管理领域,它可以...
接下来,我们来看如何在Spring Boot中使用`@Validated`注解进行接口参数的校验。当一个控制器方法接收的参数前有`@Validated`注解时,Spring Boot会自动调用对应的验证规则。例如,我们有一个用户注册的接口,接收一...
当在方法参数上使用`@Valid`时,Spring MVC会调用对应的Validator来检查该参数,确保其满足预定义的校验规则。 2. **如何创建验证规则**: 我们可以通过在模型类的属性上添加各种验证注解来定义校验规则。例如,...
使用@ConfigurationProperties注解时,需要在项目中导入spring-boot-configuration-processor依赖。 8. JSR303校验:JSR303是Java的一个标准规范,用于在对象上进行校验。Spring Boot利用JSR303规范提供的校验注解...