Validation框架的应用

本文介绍了Java Validation框架的应用,包括其核心属性message、groups和payload的解释,以及自定义注解的实践。通过Validation框架,可以实现数据的优雅校验,避免分层验证的冗余。文章还探讨了@Validated、@Valid注解的使用,以及如何通过@Pattern注解实现灵活的校验。此外,详细阐述了约束注解的初级、中级和高级应用,包括自定义校验注解的创建步骤。最后,文章提到了BindException的解析及其在获取异常信息中的作用。
摘要由CSDN通过智能技术生成

一,前言

这篇博客只说一下Validation框架的应用,不涉及相关JSR,相关理论,以及源码的解析。

如果之后需要的话,会再开博客描写,这样会显得主题突出一些。

后续扩展部分会解释message,groups,payload三个核心属性等。

自定义注解部分,会给出蚂蚁金服内部真实采用的自定义校验注解。
二,简介

简单来说,就是通过Validation框架,进行数据的各类校验。从Java的基本数据类型到自定义封装数据类型,从非空判断到正则表达式判断,都是Validation框架所支持的。

在Validation之前,层次架构中,开发者总是采用分层验证模型。就是分别在控制层,服务层,数据层等分别对目标对象的目标属性进行校验。很明显,这是非常不优雅的,而且开发效率低,因为存在大量重复校验逻辑。

而Validation则提出一个元数据验证模型,而在Spring体系中,则表现为Java Bean验证模型。站在Spring角度来说,无论是在哪个层次,都是针对Java Bean进行验证的。所以,Validation则通过在目标Bean上添加约束注解,以及背后的验证程序,实现了一个对业务代码无侵入的校验功能。
三,使用方法
1.添加依赖

<!-- Validation 相关依赖 -->
<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>2.0.1.Final</version>
</dependency>

这是Validation框架的核心依赖。

该依赖是包含在SpringBoot的spring-boot-web-starter中的。所以如果使用了前面Spring-boot-web-starter依赖,则不需要再次引入Validation框架的依赖。

至于EL等依赖,常用于自定义注解,具体可以根据需要进行依赖引入。
2.添加约束注解

针对目标Bean,针对不同属性的验证需求,添加不同的约束注解。

如UserVo的userId,添加@NotNull注解,表示这个属性在验证框架中不可为空。

有关约束注解,后面有详尽描述。
3.开启验证

即使对元数据模型添加了约束注解,但是还没有明确开启验证流程。站在Validation框架的角度,它并不知道应该在什么时候进行校验。因为除了控制层,我们还可能在服务层验证。即使是在服务层,一个调用链路,可能涉及多个方法,也需要确定在哪个方法进行验证。

那么,开启验证的方法有两种(也许还有别的方法,欢迎补充):

验证注解:@Validated或者@Valid
初始化验证器:Validation.buildDefaultValidatorFactory().getValidator();

验证注解

@Validated注解的效果与@Valid是一样的,毕竟@Validated是SpringBoot对@Valid注解的封装(@Valid是Java的自带的注解)。而@Validated注解是包含在SpringBoot的spring-boot-web-starter中的。

在对应位置添加@Validated注解(当程序执行到这里,就会执行对应的校验逻辑):
自定义对象(启动注解在自定义对象前)

@PostMapping("save.do")
@ResponseBody
public ServerResponse saveConfig(@Validated(InclinationConfig.ConfigCommitGroup.class) InclinationConfig inclinationConfig) {
	// 业务逻辑
}

基本数据类型()

@Validated
public class demo {

	@PostMapping("get.do")
	@ResponseBody
	public ServerRespon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值