Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1|回复: 0

新闻速览SpringBoot+Vue项目异常处理教程 - 注册用户功能非法参数解决方案 - 幽络源

[复制链接]

36万

主题

0

回帖

108万

积分

超级版主

Rank: 8Rank: 8

积分
1082619
发表于 昨天 20:18 | 显示全部楼层 |阅读模式
前提场景
现在有一个SpringBoot+Vue的项目的注册用户的功能,假设要求用户输入的账号密码不能为空,若用户输入了空值,应当提示用户或密码不能为空,而不是直接弹出错误页面,如下图为幽络源某系统的注册界面以及不处理异常时出现异常的界面。



在如上登录页,用户不填写任何值,直接点击注册,但后端又不允许空值因此直接抛出异常,前后端都不做处理的话就会弹出如下红色报错框,这显然是不友好的



处理的两种方案
方案一:后端只抛异常,前端捕获并提示

方案二:后端抛异常且统一处理响应,前端根具响应码提示(这里以响应码为1表示成功,0表示失败)

方案一:后端只抛异常,前端捕获并提示
如下图,在后端接口中,后端对于空值以及null做了非法参数异常抛出



如下图,我们先在catch捕获块先输出一下异常对象的信息



现在我们再不填写任何信息注册用户并查看控制台信息,可以看到,在捕获到的异常对象中,后端传入的信息在对象的response-?data-message中,并且可以看到此时的界面已经不再是上边提到的非人性化的红色报错框了



因此,前端这里捕获到异常后,可以通过?elementui语法输出后端异常对象中的message,如图





如上,以前端为主的异常处理解决了直接弹出红色报错框的问题,但是在浏览器的开发者工具的控制台以及络中的红色报错可能有的开发者认为这样仍然不是很完美,下面看以后端处理为主的方式。

方案二:后端抛异常且统一处理响应,前端根具响应码提示
后端注册用户接口不变,仍为如下图



在后端,我们配置个全局异常处理拦截器,因为此接口我们可以看到所抛出的异常为IllegalArgumentException,也就是非法参数异常,在config包下新建文件为GlobalExceptionHandler的java文件,加入如下代码(需要注意的是在我这个系统中,用的统一响应体为自定义的Res对象,且以1为成功响应,0为失败响应,可自行更换或使用下方我的响应对象)

importcombackutilsRes;
importorgspringframeworkwebbindannotationExceptionHandler;
importorgspringframeworkwebbindannotationRestControllerAdce;

@RestControllerAdce
publicclassGlobalExceptionHandler{

**
*非法参数异常全局拦截器
*@paramex异常对象
*@return
*
@ExceptionHandler(IllegalArgumentExceptionclass)
publicRes<StringhandleIllegalArgumentException(IllegalArgumentExceptionex){
returnnewRes(0,exgetMessage());
}
}
如果你需要我的统一响应对象,可copy如下:

publicclassRes<T{
**
*状态码0失败1成功
*
privateIntegercode;
**
*提示信息,如果有错误时,前端可以获取该字段进行提示
*
privateStringmsg;
**
*查询到的结果数据,
*
privateTdata;
publicRes(Integercode,Stringmsg){
thiscode=code;
thismsg=msg;
}
publicRes(Integercode,Tdata){
thiscode=code;
thisdata=data;
}
publicRes(Integercode,Stringmsg,Tdata){
thiscode=code;
thismsg=msg;
thisdata=data;
}
publicIntegergetCode(){
returncode;
}
publicvoidsetCode(Integercode){
thiscode=code;
}
publicStringgetMsg(){
returnmsg;
}
publicvoidsetMsg(Stringmsg){
thismsg=msg;
}
publicTgetData(){
returndata;
}
publicvoidsetData(Tdata){
thisdata=data;
}
}
如图



在前端中,这里就需再捕获异常了,因为后端的全局异常处理已经将其捕获并统一了响应,因此代码改为如下图



ok,现在来测试空值注册,看看效果



可以看到,如上图,前端正常的弹出了提示信息,且在控制台以及络不再有红色的错误信息,这是一种比较推荐的方式。

结语
以上是幽络源的全栈教程=SpringBoot+Vue项目的配置异常处理的两种方式(以注册用户功能非法参数为例),如有不懂之处,或对全栈技术感兴趣的可以加入我们的QQ群307531422交流。



想要在市场上大有作为,源码网就要在原有的基础上加大力度进行产品的升级换代以便适应消费者的消费需求。提供经过严格测试的免费源码、各种线上兼职和网络兼职的网创教程、编程及网络相关的技术教程分享,助您轻松获取资源和技术支持。https://www.youluoyuan.com/

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|足球新闻网

GMT+8, 2025-4-20 16:18 , Processed in 0.143198 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表