在 Spring Boot 使用 hibernate-validator 进行参数校验
在 Spring Boot 使用 hibernate-validator 进行参数校验
使用 hibernate-validator 进行参数校验可以免去繁琐的参数校验代码,使代码看上去更简洁。
1.什么是 hibernate-validator
hibernate-validator 用于对应用层的参数校验。
举一个简单的例子,在用户注册时,用户难免会输入一些不合规范的参数。例如:邮箱地址不合规范,手机号码不合规范,用户名长度超出范围等等的操作。而开发人员则需要编写代码来应对这些情况,但是校验代码出现在业务代码中会使业务代码十分臃肿。而 hibernate-validator 就可以帮助开发人员解决这些问题。
2.为什么使用 hibernate-validator
在上面的例子已经可以解释这一个问题了。
- 使用 hibernate-validator 进行参数校验可以免去繁琐的参数校验代码,使代码看上去更简洁。
- 使用 hibernate-validator 将参数校验代码和业务代码,降低代码的耦合度。
- 无需考虑校验代码的实现,更专注与业务代码的实现。
3.如何使用 hibernate-validator
接下来我们使用一个用户注册的例子来学习使用 hibernate-validator 。
3.1 导入 hibernate-validator 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
因为
spring-boot-starter-web包里面有
hibernate-validator包,所以仅仅需要导入
spring-boot-starter-web即可。
3.2 编写 User 类
public class User { private String id; @Size(min = 3 , max = 12 , message = "用户名长度在3~12字符之间") @NotBlank(message="用户名不能为空") private String userName; @Size(min = 8 , message = "密码长度不能小于8个字符") @NotBlank(message="密码不能为空") private String userPassword; @Email @NotBlank(message="邮箱不能为空") private String userEmail; @Pattern(regexp = "1[3|4|5|7|8][0-9]\\d{8}" , message = "不是一个合法的手机号码") @NotBlank(message="手机号码不能为空") private String userPhone; //...省略get、set方法 }
hibernate-validator 注解介绍:
@Size(min , max , message)
元素的大小必须在指定的范围内。@NotBlank(message)
:只能用于校验字符串。字符串不能为null,并且trim()
以后length要大于0,即不能只有空格。@Email
:元素必须是电子邮箱地址。@Pattern(regexp = 正则表达式)
:元素必须符合指定的正则表达式。
除了
@NotBlank(message)还有其他校验参数不能为空的注解:
@NotNull
:任何对象的value不能为null。@NotEmpty
:集合对象的元素不为0,即集合不为空,也可以用于字符串不为null。
3.3 编写 UserController 类
@RestController @RequestMapping("api/user") public class UserController { @RequestMapping(value = "/" , method = RequestMethod.POST) public Object add(@RequestBody @Valid User user , BindingResult result){ // 如果参数有错误 if (result.hasErrors()){ List<String> errorList = new ArrayList<>(); for (ObjectError error : result.getAllErrors()) { errorList.add(error.getDefaultMessage()); } return errorList; //返回错误信息 } return "注册成功"; //模拟注册成功 } }
hibernate-validator 注解介绍:
@Valid
:用于嵌套校验,示例中表示开启校验 User 类的字段。
BindingResult对象,用于获取
@Valid校验失败情况下的反馈信息。(可选)
@Valid注解和
BindingResult对象应该成对出现,一个
@Valid注解对应一个
BindingResult对象
启动项目查看效果:
从运行结果可以发现,hibernate-validator 将所有的参数错误都校验出来并返回了。但是通常我们在注册用户时只会返回一个错误信息。从这里我们就引出了 hibernate-validator 的两种模式,普通模式和快速失败返回模式。
3.4 配置 hibernate-validator
@Configuration public class ValidatorConfiguration { /** * 配置hibernate Validator为快速失败返回模式 */ @Bean public Validator validator(){ ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class ) .configure() .addProperty( "hibernate.validator.fail_fast", "true" ) .buildValidatorFactory(); Validator validator = validatorFactory.getValidator(); return validator; } }
@Configuration注解用于使spring加载配置类。
创建一个
Validator(验证器)Bean,使用
addProperty函数将验证器设置为快速失败返回模式。
启动项目查看效果:
3.5 校验 @RequestParam 参数
使用校验bean的方式,没有办法校验RequestParam的内容。我们需要其他注解来实现对
@RequestParam参数的校验。
在 ValidatorConfiguration
配置 hibernate-validator。
@Bean public MethodValidationPostProcessor methodValidationPostProcessor() { MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor(); /**设置validator模式为快速失败返回*/ postProcessor.setValidator(validator()); return postProcessor; }
假设我们实现一个通过用户名查询用户的接口。
@RestController @RequestMapping("api/user") @Validated public class UserController { @RequestMapping(value = "/" , method = RequestMethod.GET) public Object query( @NotBlank @Size(min = 3 , max = 12 , message = "用户名长度在3~12字符之间") @RequestParam String userName){ //...具体接口实现 } }
hibernate-validator 注解介绍:
@Validated
:开启校验 @RequestParam 参数
启动项目查看效果:
还有很多其他的 hibernate-validator 注解,可以自己尝试和学习。
4.关注我的微信公众号,查看更多文章,第一时间收到我的文章。
在 Spring Boot 使用 hibernate-validator 进行参数校验,你学会了吗?
参考文档:springboot使用hibernate validator校验
- 点赞
- 收藏
- 分享
- 文章举报
- springboot中使用hibernate-validator进行参数校验
- springboot- hibernate-validator(校验框架)使用
- 使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
- Spring boot进行参数校验的方法实例详解
- 使用validator-api来验证spring-boot的参数
- Java服务端接口参数校验框架——hibernate-validator使用
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
- Spring Boot 全局异常处理 与 Hibernate Validator校验框架整合
- Spring Boot项目使用参数校验
- SpringMVC集成Hibernate Validator进行参数校验
- 【spring boot/spring cloud踩坑记录】使用feign进行get请求时,对参数中的JSR310日期类进行处理
- SpringBoot 中使用声明式注解简化参数校验
- 使用Spring的Validator接口进行校验
- 如何在Spring Boot项目使用参数校验
- 如何在Spring Boot项目使用参数校验
- 在SpringMvc中使用hibernate的hibernate-validator来进行校验入参,如@NotNull , @Length
- springboot 使用hibernate进行双向关联json解析时死循环处理
- 使用validator-api来验证spring-boot的参数
- 详解如何在Spring Boot项目使用参数校验
- springboot使用Validator校验方式