700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > springboot使用Validation API和全局异常优雅的校验方法参数

springboot使用Validation API和全局异常优雅的校验方法参数

时间:2024-06-29 14:05:58

相关推荐

springboot使用Validation API和全局异常优雅的校验方法参数

目录

一、为什么使用Validation 来验证参数

二、如何使用Validation相关注解进行参数校验

三、Validation类的相关注解及描述

四、使用Validation API进行参数效验步骤

五、 Spring Validation的三种校验方式

五、springboot项目中实战演练

补充:使用自定义参数注解

一、为什么使用Validation 来验证参数

通常我们在使用spring框架编写接口时,对于部分接口的参数我们要进行判空或者格式校验来避免程序出现异常。那是我们一般都是使用if-else逐个对参数进行校验。这种方法按逻辑来说也是没有问题的,同样也能实现预期效果。但是,这样的代码从可读性以及美观程序来看,是非常糟糕的。那么,我们就可以使用@valid注解来帮助我们优雅的校验参数。

二、如何使用Validation相关注解进行参数校验

①为实体类中的参数或者对象添加相应的注解;②在控制器层进行注解声明,或者手动调用校验方法进行校验;③对异常进行处理;

三、Validation类的相关注解及描述

此处只列出Validator提供的大部分验证约束注解,请参考hibernate validator官方文档了解其他验证约束注解和进行自定义的验证约束注解定义。

四、使用Validation API进行参数效验步骤

整个过程如下图所示,用户访问接口,然后进行参数效验。 对于GET请求的参数可以使用@validated注解配合上面相应的注解进行校验或者按照原先if-else方式进行效验。而对于POST请求,大部分是以表单数据即以实体对象为参数,可以使用@Valid注解方式进行效验。如果效验通过,则进入业务逻辑,否则抛出异常,交由全局异常处理器进行处理。

五、 Spring Validation的三种校验方式

第一种:在Controller方法参数前加@Valid注解——校验不通过时直接抛异常,get请求直接在平面参数前添加相应的校验规则注解,使用这种的话一般结合统一异常处理进行处理;

第二种:在Controller方法参数前加@Valid注解,参数后面定义一个BindingResult类型参数——执行时会将校验结果放进bindingResult里面,用户自行判断并处理。

这里我们是直接抛出了异常,如果没有进行全局异常处理的话,接口将会返回如下信息:

第三种:用户手动调用对应API执行校验——Validation.buildDefault ValidatorFactory().getValidator().validate(xxx)

这种方法适用于校验任意一个有valid注解的实体类,并不仅仅是只能校验接口中的参数;

这里我提取出一个工具类,如下:

MyValidationUtils.class

五、springboot项目中实战演练

spring-boot-starter-web依赖已经集成相关jar,无需额外引入。

1.对实体类的变量进行注解标注

实体类中添加 @Valid 相关验证注解,并在注解中添加出错时的响应消息。

User.class

如果是嵌套的实体对象,并且也要校验该对象,则需要在最外层属性上添加@Valid注解

UserInfo.class

2.创建自定义异常

自定义异常类,方便我们处理手动抛出的异常。

3.自定义响应枚举类

定义一个返回信息的枚举类,方便我们快速响应信息,不必每次都写返回消息和响应码。

4.自定义响应对象类

创建用于返回调用方的响应信息的实体类。

5.添加全局异常处理

全局异常用于处理校验不通过时抛出的异常,并通过接口返回,同时对其他未知异常进行处理。

5.接口类中添加相关注解

处理get请求直接在参数前添加验证注解,处理post请求时在对象前添加@Valid注解

TestController.class

6.进行测试

补充:使用自定义参数注解

1.我们这里创建一个身份证校验注解

这个注解是作用在Field字段上,运行时生效,触发的是IdentityCardNumber这个验证类。

message 定制化的提示信息,主要是从ValidationMessages.properties里提取,也可以依据实际情况进行定制groups 这里主要进行将validator进行分类,不同的类group中会执行不同的validator操作payload 主要是针对bean的,使用不多。

2.自定义Validator

校验工具类IdCardValidatorUtils.class

3. 使用自定义的注解

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。