首页 > 其他分享 >架构设计-全局异常处理器404、405的问题

架构设计-全局异常处理器404、405的问题

时间:2024-06-10 21:04:47浏览次数:18  
标签:架构设计 responseData 处理 405 404 ex put 全局 异常

java web 项目中经常会遇到异常处理的问题,普遍的做法是使用全局异常处理,这样做有以下几种原因:

  1. 集中化处理:全局异常处理允许你在一个集中的地方处理整个应用程序中的异常。这有助于减少代码重复,因为你不必在每个可能抛出异常的方法中都编写相同的异常处理代码。
  2. 统一错误响应:通过全局异常处理,你可以确保应用程序在发生错误时返回统一的错误响应。这对于RESTful API特别重要,因为它允许客户端以统一的方式处理不同类型的错误。
  3. 日志记录:全局异常处理器是记录异常详细信息的理想位置。你可以在这里添加日志记录逻辑,以便在出现问题时能够轻松地跟踪和诊断问题。
  4. 跨控制器异常处理:如果你使用Spring MVC并定义了多个控制器,全局异常处理允许你在一个位置处理来自所有这些控制器的异常,而无需在每个控制器中都定义相同的异常处理逻辑。
  5. 异常转换:在某些情况下,你可能希望将原始异常转换为更具体或更通用的异常类型。全局异常处理允许你轻松地实现这种转换。
  6. 异常通知:除了返回错误响应外,全局异常处理还可以用于触发其他通知,如发送电子邮件、向外部系统发送消息或更新状态系统等。
  7. 简化测试:由于全局异常处理将异常处理逻辑集中在一个位置,因此更容易为这些逻辑编写单元测试,以确保它们按预期工作。
  8. 灵活性:全局异常处理通常允许你根据异常类型、请求参数或其他条件来定制响应。这提供了很大的灵活性,以满足各种业务需求。

其中有2种异常 404、405 需要特别注意,因为这2种异常不会经过 base controller 层处理,需要在上一层 spring 组件进行处理。

@ControllerAdvice
public class GlobalExceptionHandler{
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public CommonResult doError(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Exception ex) {
        ex.printStackTrace();
        Map<String,Object> responseData = new HashMap<>();
        if( ex instanceof BizException){
            BizException bizException = (BizException)ex;
            responseData.put("errCode",bizException.getErrCode());
            responseData.put("errMsg",bizException.getErrMsg());
        } else if(ex instanceof ServletRequestBindingException){
            // 405
            responseData.put("errCode",BizError.UNKNOWN_ERROR.getErrCode());
            responseData.put("errMsg","url绑定路由错误!");
        } else if(ex instanceof NoHandlerFoundException){
            // 404
            responseData.put("errCode",BizError.UNKNOWN_ERROR.getErrCode());
            responseData.put("errMsg","访问路径不存在!");
        } else {
            responseData.put("errCode", BizError.UNKNOWN_ERROR.getErrCode());
            responseData.put("errMsg",BizError.UNKNOWN_ERROR.getErrMsg());
        }
        return CommonResult.create(responseData,"fail");
    }
}

标签:架构设计,responseData,处理,405,404,ex,put,全局,异常
From: https://blog.csdn.net/suiusoar/article/details/139581718

相关文章

  • 架构设计-web项目中跨域问题涉及到的后端和前端配置
    WEB软件项目中经常会遇到跨域问题,解决方案早已是业内的共识,简要记录主流的处理方式:跨域感知session需要解决两个问题:1.跨域问题2.跨域cookie传输问题跨域问题解决跨域问题有很多种方式,如使用springboot自带的crossOrigin注解@CrossOrigin(origins={"*"},allowedHe......
  • 当接口出现404问题时,可能出现问题的原因如下
    当我们在进行网络应用开发或者使用API时,经常会遇到后端接口返回404(NotFound)错误的情况。这种错误通常意味着客户端请求了服务器上不存在的资源,可能由多种原因造成。下面将详细介绍这些原因,并给出相应的解决方法。1.资源路径错误一个常见的原因是客户端请求的资源路径不正确。这......
  • 软考 系统架构设计师系列知识点之杂项集萃(32)
    接前一篇文章:软考系统架构设计师系列知识点之杂项集萃(31)第51题网络逻辑结构设计的内容不包括()。A.逻辑网络设计图B.IP地址方案C.具体的软硬件、广域网连接和基本服务D.用户培训计划正确答案:D。所属知识点:旧版教材计算机网络->网络规划与设计解析:逻辑网络设计......
  • 软考 系统架构设计师系列知识点之杂项集萃(33)
    接前一篇文章:软考系统架构设计师系列知识点之杂项集萃(32)第53题企业信息集成按照组织范围分为企业内部的信息集成和企业外部的信息集成。在企业内部的信息集成中,()实现了不同系统之间的互操作,使得不同系统之间能够实现数据和方法的共享;()实现了不同应用系统之间的连接、协调运......
  • 2024050801-重学 Java 设计模式《实战策略模式》
    重学Java设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」一、前言文无第一,武无第二不同方向但同样努力的人,都有自身的价值和亮点,也都是可以互相学习的。不要太过于用自己手里的矛去攻击别人的盾......
  • 23201405-pta的总结blog-二
    前言本次作业blog主要对于答题判题程序4、家具强电电路模拟1-2进行分析说明和总结。这三次题目集的题目量和难度不必多说,题不在多,而在精。题目主要是为了提高能力,区分层次而出,难度不小。知识点主要有,抽象类、输入输出的处理,正则表达等。更重要的是分析题目,设计程序并实现的能......
  • Day17| 110.平衡二叉树、 257. 二叉树的所有路径 、 404.左叶子之和
    110.平衡二叉树(优先掌握递归)再一次涉及到,什么是高度,什么是深度,可以巩固一下。题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.html#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):......
  • 访问托管在运行 IIS 的服务器上的网站时出现 HTTP 错误 405.0
    问题:客户端请求部署在IIS中的APS.NETCOREAPI时,get请求正常,但delete和put请求报405错误解决方法:在控制面版本-》程序功能-》启用关闭Windows功能中的,IIs-》常见Http->WebDAV发布(删除),后恢复正常。即当前症状:3本文内容症状原因1原因2原因3显示另外3个本文可帮......
  • BD202404 110串
    百度之星一场,t4题目链接:对于这种连续状态限制的字符串方案数,首先考虑dp,首先定义好每个状态方便转移,0状态是结尾为0,1状态是结尾1个连续1,2状态是结尾两个连续1,有以下关系if(s[i]=='1'){if(j>0)dp[i][j][0]=(dp[i][j][0]+dp[i-1][j-1][0]+dp[i-1][j-1]......
  • React刷新页面报错(404)
    报错原因:你在浏览器内可以由首页跳转到其他路由地址,是因为这是由前端自行渲染的,你在ReactRouter定义了对应的路由,脚本并没有刷新网页访问后台,是JS动态更改了location。当刷新时,首先是访问的后台地址,然后返回的页面内加载了React代码,最后在浏览器内执行;也就是说如果这个时候报40......