Hibernate-validation参数校验详解

@Validated是@Valid的扩展:@Valid是javax的,@Validated是Hibernate-validation基于javax扩展的。

引入依赖包

<!-- 参数校验:在 SpringBoot 2.4 以前,web-starter默认引入 spring-boot-starter-validation 包,
而自 SpringBoot 2.4.0 以后官方将其排除,需要单独引入spring-boot-starter-validation包。
注意是starter包,否则需要手动配置,不然校验不生效。 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

校验异常处理

1)推荐使用@Valiated注解,在嵌套对象时使用@Valid注解。

2)对于比较少的参数,可以不定义类。在contoller类上加@Validated注解。

3)不仅可以作用于Controller层,spring的bean都可以,比如service。

4)可以自定义校验规则。

5)错误码可以做到每种类型(NotEmpty、NotBlank、Min)一个错误码,但是无法实现每个错误码只有一个地方。并且只支持body的异常。

6)支持分组,在某些分组下规则才生效。注意,如果不带Default.class参数,仅有标识分组的才会校验。

7)校验在参数解析时处理,也就是RequestResponseBodyMethodProcessor中。

失败快速返回

也就是只要有一个参数错误,即可返回。

国际化

支持多语言的配置在hibernate-validatator包里面的resource目录下面,默认使用spring框架的Accept-Language字段。

常用

// 只用在String上,表示传进来的值不能为null,而且调用trim()后,长度必须大于0
@NotBlank
// 不能为null,但可以为empty(分配了内存空间,但值为空)
@NotNull
// 不能为null,而且长度必须大于0
@NotEmpty

github源码https://github.com/mountainest/framework/tree/main/src/main/java/com/mountain/framework/controller/valid

参考:
官网:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-declaring-bean-constraints
基础介绍:https://blog.csdn.net/qq_39609993/article/details/114288378
国际化:https://juejin.cn/post/6979165353481863182
错误码处理:https://www.zhangshengrong.com/p/OQNzr4YpNR/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate Validator是一种基于注解的校验框架,用于验证JavaBean中的数据。它提供了一种简单易用的方式来确保数据的完整性和一致性,在实际开发中被广泛应用。 下面是一个校验工具类的示例: ```java import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; public class ValidatorUtils { private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); /** * 校验对象 * * @param obj 待校验对象 * @param groups 待校验的组 * @throws Exception 校验不通过,则报Exception异常 */ public static void validateEntity(Object obj, Class<?>... groups) throws Exception { Set<ConstraintViolation<Object>> constraintViolations = validator.validate(obj, groups); if (!constraintViolations.isEmpty()) { StringBuilder msg = new StringBuilder(); for (ConstraintViolation<Object> constraintViolation : constraintViolations) { msg.append(constraintViolation.getMessage()).append("<br>"); } throw new Exception(msg.toString()); } } } ``` 使用示例: ```java public class User { @NotNull(message = "用户名不能为空") private String username; @NotNull(message = "密码不能为空") private String password; // getter and setter } public class Test { public static void main(String[] args) { User user = new User(); user.setUsername(null); user.setPassword(null); try { ValidatorUtils.validateEntity(user); } catch (Exception e) { e.printStackTrace(); } } } ``` 注意事项: - 需要在JavaBean的属性上添加相应的注解; - 需要在校验工具类中使用`Validation.buildDefaultValidatorFactory().getValidator()`方法获取`Validator`对象; - 可以通过`groups`参数指定需要校验的组,如果不指定,则校验所有组的规则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值