springboot中利用全局异常处理怎么实现登录注册验证
springboot中利用全局异常处理怎么实现登录注册验证,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
全局异常处理
首先来创建一个sprIngboot的web项目或模块,目录结构如下
实体类User.java
@Data publicclassUser{ privateStringuserName; privateStringpasswold; }
实体类UserResult.java 把数据封装到这里返回到客户端
@Data @NoArgsConstructor @AllArgsConstructor publicclassUserResult{ privateintcode; privateStringmsg; }
接下来自定义异常,都继承自Exception
UserNullException.java 当用户名为空抛出这个异常
publicclassUserNullExceptionextendsException{ publicUserNullException(){ super("用户名不能为空"); } }
PasswoldNullException.java 当密码为空抛出这个异常
publicclassPasswoldNullExceptionextendsException{ publicPasswoldNullException(){ super("密码不能为空"); } }
UserNamePasswordNullException.java 当用户名和密码都为空抛出这个异常
publicclassUserNamePasswordNullExceptionextendsException{ publicUserNamePasswordNullException(){ super("请输入用户名和密码"); } }
UserNameValidationException.jva 当输入不符合要求的用户名时抛出此异常
publicclassUserNameValidationExceptionextendsException{ publicUserNameValidationException(){ super("请输入6到16位的数字或字母组合"); } }
UserNamePasswordNullException.java 当输入的密码不符合要求时抛出这个异常
publicclassUserNamePasswordNullExceptionextendsException{ publicUserNamePasswordNullException(){ super("请输入用户名和密码"); } }
通过注解的方式捕获异常
@Controller + @ExceptionHandler
@ControllerAdvice + @ExceptionHandler
若返回的不是页面,把@Controller换成@RestController,@ControllerAdvice换成@RestControllerAdvice,也可以在@Controller类下的方法那里加上@ResponseBody
@Controller + @ExceptionHandler
@Controller:注解此类是Controller类
@ExceptionHandler:此注解注解到类的方法上,当此注解里定义的异常抛出时,此方法会被执行。如果@ExceptionHandler所在的类是@Controller,则此方法只作用在此类。如果@ExceptionHandler所在的类是@ControllerAdvice,则此方法会作用在全局
在这里我只进行了全局异常的捕获,就是只用了@RestControllerAdvice,对全部controller层进行了异常监控,任何控制层抛出常,只要@RestControllerAdvice类下@ExceptionHandler注解的value值指定有的都会被执行
@RestControllerAdvice publicclassUserExceptionHandler{ @ExceptionHandler(value=UserNullException.class) public@ResponseBodyUserResultuserNull(HttpServletRequestrequest,Exceptionex) { UserResultuserResult=newUserResult(); userResult.setCode(9); userResult.setMsg(ex.getMessage()); returnuserResult; } @ExceptionHandler(value=PasswoldNullException.class) publicUserResultpasswordNull(HttpServletRequestrequest,Exceptionex) { UserResultuserResult=newUserResult(); userResult.setCode(10); userResult.setMsg(ex.getMessage()); returnuserResult; } @ExceptionHandler(value=UserNamePasswordNullException.class) public@ResponseBodyUserResultnamePassNull(HttpServletRequestrequest,Exceptionex) { UserResultuserResult=newUserResult(); userResult.setCode(11); userResult.setMsg(ex.getMessage()); returnuserResult; } @ExceptionHandler(value=UserNameValidationException.class) public@ResponseBodyUserResultUserNameValidation(HttpServletRequestrequest,Exceptionex) { UserResultuserResult=newUserResult(); userResult.setCode(12); userResult.setMsg(ex.getMessage()); returnuserResult; } @ExceptionHandler(value=PasswordValidationException.class) public@ResponseBodyUserResultPasswordValidation(HttpServletRequestrequest,Exceptionex) { UserResultuserResult=newUserResult(); userResult.setCode(13); userResult.setMsg(ex.getMessage()); returnuserResult; } }
在这里SignInController.java是全局异常捕获类
@RestControllerAdvice @RequestMapping(value="user/api") publicclassSignInController{ @PostMapping(value="/sign_in") publicUserResultsignIn(@RequestBodyUseruser)throwsException{ if(user.getUserName()==null&&user.getPasswold()==null) { thrownewUserNamePasswordNullException(); }elseif(user.getUserName()==null) { thrownewUserNullException(); }elseif(user.getPasswold()==null) { thrownewPasswoldNullException(); }else{ if(userNameRegex(user.getUserName())==false){ thrownewUserNameValidationException(); }elseif(passRegex(user.getPasswold())==false){ thrownewPasswordValidationException(); } } returnnewUserResult(0,"登录成功"); } /** *正则表达式:验证规则 */ publicstaticfinalStringREGEX_PASSWORD="^[a-zA-Z0-9]{6,16}$"; /** *手机号 */ StringPHONE_NUMBER_REG="^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$"; publicbooleanuserNameRegex(StringuserName) { returnPattern.matches(REGEX_PASSWORD,userName); } publicbooleanpassRegex(Stringpassword) { returnPattern.matches(REGEX_PASSWORD,password); } }
加为要求前端传的是JSON数据,所以对象参数前务必加上@RequestBody这个注解(踩过坑)
项目中加入了swagger配置(swagger简单使用),这里用来输入几条数据进行测试
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现
-
Springboot+SpringSecurity怎么实现图片验证码登录
-
SpringBoot注解的知识点有哪些
SpringBoot注解的知识点有哪些这篇“SpringBoot注...
-
SpringBoot2.x中management.security.enabled=false无效怎么解决
-
springboot怎么禁用某项健康检查
springboot怎么禁用某项健康检查今天小编给大家分享一下sp...