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

杭州市城乡规划局建设局官方网站专业教育网站建设

杭州市城乡规划局建设局官方网站,专业教育网站建设,东莞关键字排名优化,七牛图片怎么上传wordpress博客1.全局异常处理1.1什么是全局异常处理器全局异常处理器是SpringMVC框架中的一种异常处理机制,用于统一处理由控制器抛出的异常。全局异常处理器可以帮助我们捕获和处理控制器中的异常,并且根据不同的异常类型进行不同的处理操作,从而保障应用…

1.全局异常处理

1.1什么是全局异常处理器

全局异常处理器是SpringMVC框架中的一种异常处理机制,用于统一处理由控制器抛出的异常。

全局异常处理器可以帮助我们捕获和处理控制器中的异常,并且根据不同的异常类型进行不同的处理操作,从而保障应用的健壮性和稳定性。

当然,SpringMVC中有内置的异常处理对象,但是呈现的结果对于用户端不友好,所以实际项目我们一般会使用全局异常处理器处理异常。

如果仅仅在项目中写下以下代码,会导致异常处理呈现的结果用户端难以理解。

@RestController
@RequestMapping("/v1/tests/")
public class TestController {@GetMapping("test")public JsonResult test(Integer id) {if (id < 0) {throw new IllegalArgumentException("id不能小于0");}return new JsonResult(200,"成功访问");}
}

如果我们能做到像一些企业级的异常应对措施,比如bilibili

当输入网址https://www.bilibili.com/id=111
这个地址根本不存在,结果返回一个“找不到页面”的页面。

这种处理效果是 前端+后端共同开发的效果,采用后端捕获异常 + 前端自定义错误页面渲染 的组合处理方式

前后端分离(REST 风格)

  • 用全局异常处理器统一返回结构化 JSON

  • 由前端(如 Vue、React)判断 status 或 code,显示漂亮的提示页面

{ "code": 404, "msg": "资源不存在", "data": null }

然后前端根据 code == 404 显示“找不到页面”的提示比如哔哩哔哩的效果。

1.2 全局异常处理器的配置


Spring MVC中的全局异常处理器可以通过以下方式进行配置:

1. 创建 exception.GlobalExceptionHandler 类,并添加异常处理方法;
使用 @ControllerAdvice 注解 + ResponseBody注解 或者 @RestControllerAdvice 注解标注该类;


2. 在异常处理方法上添加 @ExceptionHandler 注解,用于指定控制器中需要处理的异常类型。

@ControllerAdvice 

@ControllerAdvice 本质上是一个带有 @Component 的注解,Spring 启动时会将它的类扫描进容器中。

它内部利用 AOP 和 HandlerExceptionResolver 原理,在 Controller 执行过程中如果抛出了异常,就会查找有没有全局的异常处理器处理它。

@ExceptionHandler

@Exception注解 指定:这个方法能处理哪种异常类型

它的参数是异常对象(如 IllegalArgumentException e),Spring 会自动注入

你可以根据异常信息生成 JSON 响应、记录日志等

我们来进行优化上面的代码,在TestController基础上加上GlobalHandlerException类

@RestController
@RequestMapping("/v1/tests/")
public class TestController {@GetMapping("test")public JsonResult test(Integer id) {if (id < 0) {throw new IllegalArgumentException("id不能小于0");}return new JsonResult(200,"成功访问");}
}@Slf4j
@RestControllerAdvice
public class GlobalHandlerException {@ExceptionHandlerpublic String doHandlerIllegalArgumentExceptionException(IllegalArgumentException ex){log.error("ex : " + ex);return ex.getMessage();}
}

此时虽然没有哔哩哔哩网址那么华丽,但是总归是可以让用户清晰的知道不能传递id < 0这个限制了。

1.3 使用流程


1)创建全局异常处理器类


工程目录下创建 exception.GlobalExceptionHandler
@ControllerAdvice 注解


定义全局异常处理器,处理Controller中抛出的异常。
@RestControllerAdvice 注解
复合注解,是 @ControllerAdvice 注解和 @ResponseBody 注解的组合;
用于捕获Controller中抛出的异常并对异常进行统一的处理,还可以对返回的数据进行处理。


2)创建异常处理方法


在异常处理方法上添加 @ExceptionHandler 注解
@ExceptionHandler 注解
用于捕获Controller处理请求时抛出的异常,并进行统一的处理。
示例

/**ex.getMessage()方法:用于捕获异常信息
*/
@ExceptionHandler
public JsonResult doHandleRuntimeException(RuntimeException ex){log.error("error is " + ex.getMessage());return new JsonResult(StatusCode.OPERATION_FAILED,ex.getMessage());
}


1.4 全局异常处理器示例


1)微博详情页异常抛出

public JsonResult selectById(int id){if(id < 0) {throw new IllegalArgumentException("id值无效");}... ...
}


2)全局异常处理


exception.GlobalExceptionHandler 类


package cn.tedu.weibo.exception;import cn.tedu.weibo.common.response.JsonResult;
import cn.tedu.weibo.common.response.StatusCode;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;/*** RestControllerAdvice 是复合注解,描述的类型为一个全局异常处理对象类型,* 等价于:@ControllerAdvice+@ResponseBody* 当某个Controller方法中出现了异常,系统底层就会查找有没有定义全局异常处理对象。* 这个全局异常处理对象中有没有定义对应的异常处理方法,假如有就调用此方法处理异常。*/@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {/***  @ExceptionHandler 描述的方法为一个异常处理方法,在此注解内部可以定义具体的异常处理*  类型(例如RuntimeException),此注解描述的方法需要定义一个异常类型的形式参数,*  通过这个参数接收具体的异常对象(也可以接收其异常类型对应的子类类型的异常)。*/@ExceptionHandlerpublic JsonResult doHandleRuntimeException(RuntimeException ex){log.error("error is " + ex.getMessage());return new JsonResult(StatusCode.OPERATION_FAILED,ex.getMessage());}/*** 假如用全局异常处理对象处理Controller类中出现的异常,全局异常处理对象会优先查找与Controller* 中相匹配的异常处理方法,假如没有,会查找对应异常的父类异常处理方法。*/@ExceptionHandlerpublic JsonResult doHandleRuntimeException(IllegalArgumentException ex){log.error("IllegalArgumentException is " + ex.getMessage());return new JsonResult(StatusCode.OPERATION_FAILED,ex.getMessage());}
}


3)重启工程测试


http://localhost:8080/v1/weibo/selectById?id=-1

2 关于Throwable

在开发实践中,通常会添加一个处理 Throwable 的方法,它将可以处理所有类型的异常,则不会再出现500错误!

Throwable 是 Java 所有异常(Exception)和错误(Error)的顶层父类

GlobalExceptionHandler中添加处理 Throwable 的方法

@ExceptionHandler
public JsonResult handleThrowable(Throwable e) {return new JsonResult(8888, "程序运行过程中出现了Throwable");
}

这个方法千万不要随便加,不然后续出了异常就看不出来了,可以等到项目开发的差不多了,测试bug也都找全了,准备上线了再添加。


文章转载自:

http://XvQqnxcX.yLLym.cn
http://A0UEKKxG.yLLym.cn
http://gD6yLemu.yLLym.cn
http://P7rvDpRU.yLLym.cn
http://9uZy2gZf.yLLym.cn
http://hND4wL5D.yLLym.cn
http://VaOhVkru.yLLym.cn
http://2lnmEOG1.yLLym.cn
http://6ahZTXvU.yLLym.cn
http://WeTUNUsf.yLLym.cn
http://Iq9MuXj9.yLLym.cn
http://VGytrRDl.yLLym.cn
http://0q1olbT9.yLLym.cn
http://1au7G4e1.yLLym.cn
http://X92x5Er3.yLLym.cn
http://An1N5Ta6.yLLym.cn
http://94KzGODx.yLLym.cn
http://kvsG8HbD.yLLym.cn
http://jtXFT8lw.yLLym.cn
http://J2nL3IG1.yLLym.cn
http://39sXtwzm.yLLym.cn
http://GgwLzvSb.yLLym.cn
http://VOKJacUW.yLLym.cn
http://MzDGViaI.yLLym.cn
http://wFjYLu9o.yLLym.cn
http://RfA2XCFw.yLLym.cn
http://HSKfn05b.yLLym.cn
http://aU6omBUu.yLLym.cn
http://MrpcLUxa.yLLym.cn
http://oHtXLixF.yLLym.cn
http://www.dtcms.com/wzjs/753848.html

相关文章:

  • 有了域名和空间怎么做网站内容太原专业做网站
  • 模拟ip访问网站深圳网站建设网站设计软文推广
  • 卓业网站建设优化营商环境存在问题及整改措施
  • 做网站用哪个写比较好网站免费正能量下载
  • 怎样构建网站建设摩托125图片大全
  • 广东省住房和城乡建设厅网站首页网站建设与管理实训报告
  • 小学科学可以做实验的网站网络设计工作好找吗
  • 移动商务网站开发课程基于node网站毕设代做
  • 住房与建设部网站首页wordpress注册带密码
  • 网站的空间价格吸引人的公众号名称大全
  • 找网站开发郑州互联网seo
  • 怎么看网站哪个公司做的新建的网站必须要备案吗
  • 网站访客网站建设邀请招标书
  • 那个网站做生鲜电子商务网站建设结构分析
  • 河北seo网站优化公司wordpress头像不同步
  • 怎么通过微博做网站外链sogou网站提交
  • 做短租类型的网站网站定制报价表
  • 域名交易网站诚信建设网站的作用
  • 手机手机端网站建设宣城市住房和城乡建设局网站
  • 深圳网络开发企业网站优化公司有哪些
  • 做网站要会哪些软件织梦cms 获得网站流量次数
  • 制作单位网站建筑工程承包网app
  • 企业网站 漏洞外贸网站制作哪家快
  • 网站空间做邮箱商标图案大全大图 logo
  • 佛山建设银行网站群晖nas 做网站
  • 网站建设制作哪家好网站与微网站区别
  • 营销型网站建设一般要多少钱网站域名跟谁买
  • 网站建设柒首先金手指8相亲网站源码php模版
  • h5网站建设功能计划表wordpress自动发布网站
  • 太原建站塔山双喜网站推广公司 优帮云