当前位置: 首页 > wzjs >正文

网站开发课程软件线上商城的推广方案

网站开发课程软件,线上商城的推广方案,网站建设zrhskj,做外贸c2c网站有哪些目录 一.为什么引入全局异常处理器(目前项目碰到了什么问题)? 1.问题描述 2.与预期的差别 3.解决方案 二.解决上述问题 1.定义【业务异常类】 2.在serviceImpl层,捕获【违反唯一性约束】这个异常 3.定义【全局异常处理器】…

目录

一.为什么引入全局异常处理器(目前项目碰到了什么问题)?

1.问题描述

2.与预期的差别

3.解决方案

二.解决上述问题

1.定义【业务异常类】

2.在serviceImpl层,捕获【违反唯一性约束】这个异常

3.定义【全局异常处理器】

4.修改userController层的代码

三.展示效果

四.重点理解【全局异常处理器】的优点

1.项目引入了全局异常处理器以后,就不用在controller里面判断insert语句的影响行数了

2.引入全局异常处理器后,可以使得请求异常时的响应数据可读性非常强。

3.引入全局异常处理器后,后端产生异常时不会在控制台输出大片异常信息。

结语


一.为什么引入全局异常处理器(目前项目碰到了什么问题)?

1.问题描述

        我们在添加一个系统用户时,要求用户名(username字段)必须是唯一的,即不能重复。如果重复了,那么insert语句不会返回0(之前我们是这么认为的),而是直接令后端报错。如下:

使用apiFox添加一个系统用户: 

去后端控制台查看报错:

可见此时是因为违反了user表的username字段的唯一约束(unique)。

2.与预期的差别

        我的初衷是:添加一个系统用户时,如果添加成功,就返回影响行数1;如果添加失败,就返回影响行数0。 

        这样就能在controller层中,根据影响行数来决定返回给前端什么响应体。

        如下:

        userServiceImpl层:

        userController层: 

        重点来了:上述所预想的一切,都不成立。因为当insert语句执行失败时,根本就不返回影响行数0,而是直接使后端崩塌,响应给前端的数据也是可读性极差。 

3.解决方案

         此时就需要定义【业务异常】和【全局异常处理器】来包容上述的错误。

        就好比insert语句执行失败时,扔出一颗炸弹,但没关系,我们直接使用全局异常处理器,来吸收即可。

二.解决上述问题

1.定义【业务异常类】

        该业务异常类,就包括我们上面提到的违反了唯一约束的这种异常。

        而且以后我们项目中出现了其他的业务异常,也可以用该类来接收。

        第一步:创建Exception目录,用来存放自定义异常类和全局异常处理器。

        第二步:在 Exception目录下,创建【业务异常类】。

2.在serviceImpl层,捕获【违反唯一性约束】这个异常

3.定义【全局异常处理器】

全局异常处理器,得益于spring。我们可以在全局异常处理器中,进行捕获某种异常并进行对应操作。从而来优化响应数据、防止后端崩塌(其实是美化后端控制台)。

在exception目录下,创建全局异常处理器。

package com.neuedu.his.Exception;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;@ControllerAdvice//该注解可以自动捕获我们刚才抛出的异常
public class GlobalExceptionHandler {//处理自定义异常:【业务异常BusinessException】@ExceptionHandler(BusinessException.class)//专门处理业务异常类BusinessException@ResponseBody//表示我们要将该方法的返回值转为JSON格式返回给前端public ResponseEntity<Map<String, Object>> handleBusinessException(BusinessException e){Map<String, Object> response = new HashMap<>();response.put("code", 409);response.put("message", e.getMessage());return new ResponseEntity<>(response, HttpStatus.CONFLICT);}//处理其他异常@ExceptionHandler(Exception.class)@ResponseBodypublic ResponseEntity<Map<String, Object>> handleException(Exception e){Map<String, Object> response = new HashMap<>();response.put("code", 500);response.put("message", "系统内部错误,请稍后重试");return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);}
}

4.修改userController层的代码

三.展示效果

成功的情况:

异常情况1:违反了数据库字段唯一性(业务异常)

异常情况2:其他异常

四.重点理解【全局异常处理器】的优点

1.项目引入了全局异常处理器以后,就不用在controller里面判断insert语句的影响行数了

        如下:我们在userController层中,没有判断insert语句的影响行数的情况下,就返回了成功信息。

        这是因为,代码能走到这里,说明userService没有抛出任何异常,也就间接说明了我们的添加用户业务没有任何问题,因此结果肯定是添加成功,因此就可以直接返回成功信息。

        因此以后我们项目引入全局异常处理器以后,在controller层可以直接调用完service层后直接返回成功信息。

2.引入全局异常处理器后,可以使得请求异常时的响应数据可读性非常强。

引入全局异常处理器之前,请求异常时的响应信息:

引入全局异常处理器之后,请求异常时的响应信息:

如下图:这两种异常请求下的响应数据,可读性都十分强,比原来的大坨字母强多了。

3.引入全局异常处理器后,后端产生异常时不会在控制台输出大片异常信息。

引入全局异常处理器之前,产生异常时控制台的样貌:

引入全局异常处理器之后,产生异常时控制台的样貌:

结语

以上就是在项目中,引入【全局异常处理器】的原因、做法、优点。

喜欢本篇文章的话,可以留个免费的关注呦~~

http://www.dtcms.com/wzjs/408804.html

相关文章:

  • 做效果图网站网站托管维护
  • 水利部建设与管理司举报网站网站建设策划书范文
  • 中国企业建设协会网站网络推广员是什么工作
  • 网站风格评价百度指数官网首页
  • 自助公益网站建设网络营销环境分析
  • 微信公众平台微网站开发信息流广告模板
  • 潍坊360做网站怎么样全网搜索
  • 移动互联时代网站建设steam交易链接怎么看
  • 广州seo网站设计在线网络培训平台
  • 做全套的成都网站b站刺激战场视频
  • 无锡网站开发培训seo课程排行榜
  • 专题学习网站模板手游推广平台
  • 诸暨北京网站制作公司有哪些2022推广app赚佣金平台
  • 网页设计实训总结万能版1000字怎么样优化网站seo
  • 高端网站建设的小知识外链发布
  • 西安网站建设公百度推广客户端怎么登陆
  • 站长之家的seo综合查询工具企业网站seo公司
  • 怎么做单向网站链接四川seo排名
  • 广安做网站公司免费seo营销优化软件下载
  • 网站制作主题武汉推广系统
  • 怎么做网站赚大钱搜索引擎优化案例
  • 苏州北京网站建设网站建设建站在线建站
  • 网站源码可以做淘宝客深圳百度seo代理
  • wordpress企业站手机客户端怎么宣传自己的产品
  • 濮阳网吧北京网站优化实战
  • 访问网站人多的时候很慢是服务器问题还是带宽深圳网络推广市场
  • 兰州网络推广关键词网站优化要做哪些
  • 网站模板图链接买卖平台
  • 建设网站都需要哪些内容大数据精准营销系统
  • 甘肃兰州网站建设店铺运营方案策划