JSR303参数类型异常校验和全局异常验证

本文介绍了JSR303(BeanValidation)在JavaEE6中的应用,通过实例展示了如何简化登录参数校验的代码,使代码更清晰。详细讲解了自定义注解和校验类的创建,以及如何处理验证失败后的异常,特别是使用@ControllerAdvice进行全局异常处理的原理和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSR303参数校验
*什么是JSR303?
JSR-303是JavaEE6中的一项子规范,叫做BeanValidation,用于对JavaBean中的字段值进行验证。
关于本项目我们对登录的参数进行了验证,是我们的代码更为简洁可读性更好。
1).首先得引入jar包配置我们的pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

紧接着我们对需要进行验证的方进行开启valid验证
在这里插入图片描述
灰色我注掉的部分就是之前没有使用JSR303,仅仅根据逻辑进行的繁琐无聊的普通验证,有没有发现使用JSR303代码变得清晰许多呢。
2).那么控制层简洁的背后势必是其他地方的完美封装。
LoginVo
在这里插入图片描述
我们可以看到这个类主要是我们需要进行验证的参数的一些字段注解,那么这些注解都有什么作用呢
在这里插入图片描述
isMobile这个注解是我仿照系统给的自定义出来的,下面让我们看看Ismobile的真面目
在这里插入图片描述
该自定义注解类中用到了四种元注解,最后一个@Constraint指定了校验类,也就是接下来的IsMobileValidator类。
在这里插入图片描述
IsMobileValidator为自定义注解的校验类。校验类需要实现ConstraintValidator接口。
接口使用了泛型,需要指定两个参数,第一个自定义注解类,第二个为需要校验的数据类型。
实现接口后要override两个方法,分别为initialize方法和isValid方法。
其中initialize为初始化方法,可以在里面做一些初始化操作;
isValid方法就是我们最终需要的校验方法了。可以在该方法中实现具体的校验步骤。
3).校验说完了,那就该说说校验之后的后果了,在miaoshaUserService中可能会出现一些异常,这个异常可能是controllor返回的异常,
也比如出现在valid校验中,如果校验不通过,会产生BindException异常。那么这些异常我们会定义在一个全局GlobalExceptionHandler类里去处理,
在这里插入图片描述
*对于@ControllerAdvice,我们比较熟知的用法是结合@ExceptionHandler用于全局异常的处理,但其作用不仅限于此。
ControllerAdvice拆分开来就是Controller Advice,关于Advice,Spring Aop时讲到,其是用于封装一个切面所有属性的,
包括切入点和需要织入的切面逻辑。这里ContrllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行“切面”环绕的,
而具体的业务织入方式则是通过结合其他的注解来实现的。@ControllerAdvice是在类上声明的注解,其用法主要有三点:
结合方法型注解@ExceptionHandler,用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的;
结合方法型注解@InitBinder,用于request中自定义参数解析方式进行注册,从而达到自定义指定格式参数的目的;
结合方法型注解@ModelAttribute,表示其标注的方法将会在目标Controller方法执行之前执行。
*如果校验不通过,会产生BindException异常,捕捉到异常后可以获取到defaultMessage也就是自定义注解中定义的内容,
具体实现如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值