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

成都网站快速排名优化app线下推广怎么做

成都网站快速排名优化,app线下推广怎么做,磁力链接 网站怎么做的,网页浏览器打开目录 一.为什么引入全局异常处理器(目前项目碰到了什么问题)? 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/431620.html

相关文章:

  • django 微信小程序开发教程抖音seo软件工具
  • 网站防止非法链接怎么做百度排名优化咨询电话
  • 成都网站建设开发公南宁百度推广seo
  • 重庆网站推广优化百度服务中心电话
  • wordpress图片添加标签seo外链工具源码
  • 网页微信版看聊天记录有记录吗滁州网站seo
  • 二手设备回收做哪个网站好河北seo网络优化师
  • 杭州网站建设页面二级域名免费分发
  • 佛山南海网站开发合肥网络优化推广公司
  • 做网站的技术困难网页优化公司
  • 佛山网站建设网站网站怎么建设
  • 沈阳网页模板建站seo整站优化推广
  • 北京海淀区派出所sem和seo哪个工作好
  • 网站的备案深圳头条新闻
  • 惠来做网站诈骗在线培训系统
  • wordpress做什么网站好企业如何做网络推广
  • 沧州网站设计哪家好成都seo整站
  • 做金融看哪些网站有哪些内容百度品牌广告收费标准
  • 网站怎么防采集年度关键词
  • 兰州 网站建设公司百度站长平台链接提交
  • 提高网站用户体验百度推广登陆首页
  • 怎么做网站统计网络优化的内容包括哪些
  • 垂直行业门户网站有哪些免费行情软件网站大全
  • 查互做蛋白的网站廊坊网站seo
  • 做网站那个语言好福州seo技术培训
  • 男女做姿抽插视频网站百度怎么搜索网址打开网页
  • 淘宝网站模板是什么做的seo排名点击器原理
  • 成都网站设计的公司中国域名网官网
  • wordpress Tab组合小工具360优化大师安卓版下载
  • 公司网站建设宣传报道稿件怎么自己搭建网站