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

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


    org.springframework.boot
    spring-boot-starter-validation

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

你可能感兴趣的:(项目总结)