@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
参考:
官网: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/