@ControllerAdvice和ErrorController的用法

SpringBoot异常统一处理方法——ErrorController 在handleException方法中,我们通过HttpServletRequest对象获取了异常相关的信息,如状态码、具体的异常对象和消息等。同时,我们可以自定义异常类,并在应用程序中抛出这些异常,以触发全局异常处理逻辑。接下来,我们需要创建一个全局异常处理类,用于捕获和处理所有的异常。这时,全局异常处理类GlobalExceptionHandler就会捕获到该异常,并返回一个包含异常信息的错误响应给前端。首先,我们需要创建一个自定义的异常类,用于表示我们希望捕获和处理的特定异常。 阅读详情

在Java中异常可以分为Error和Exception,@ControllerAdvice用来处理系统中的Exception,ErrorController处理系统中的Error。

1.ErrorController

当系统出现404或者405等错误信息时,springboot默认的访问路径为/error,所以实现ErrorController并重写

getErrorPath方法
@Controller
public class AppErrorController implements ErrorController{

    private static final String ERROR_PATH = "/error";

    @Autowired
    private ErrorAttributes errorAttributes;

    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }

   /* @Autowired
    private AppErrorController(ErrorAttributes errorAttributes){
        this.errorAttributes = errorAttributes;
    }*/

    /**
     * web页面错误处理
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = ERROR_PATH,produces = "text/html")
    public String errorPageHandler(HttpServletRequest request, HttpServletResponse response){
        int status = response.getStatus();
        switch (status) {
            case 403:
                return "403";
            case 404:
                return "404";
            case 500:
                return "500";
        }

        return "index";
    }

    /**
     * 除web页面外的错误处理,如JSON/XML等
     */
    @RequestMapping(value = ERROR_PATH)
    @ResponseBody
    public ApiResponse errorApiHandler(HttpServletRequest request){
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        Map<String, Object> attr = this.errorAttributes.getErrorAttributes(requestAttributes, false);
        int status = getStatus(request);
        return ApiResponse.ofMessage(status, String.valueOf(attr.getOrDefault("message", "error")));
    }

    private int getStatus(HttpServletRequest request) {
        Integer status = (Integer) request.getAttribute("javax.servlet.error.status_code");//固定写法
        if (status != null) {
            return status;
        }
        return 500;
    }
}

2.ControllerAdvice

ControllerAdvice用来处理发生Exception错误的注解。需要注意的是不能使用try catch 捕获

@ControllerAdvice
public class GlobalExceptionHandler {

    private static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = {Exception.class,NullPointerException.class})//这里可以写多个异常
    public ApiResponse exceptionHandler(HttpServletRequest request, Exception e, HttpServletResponse response){
        int status = response.getStatus();
        return ApiResponse.ofMessage(status, e.getMessage());
    }
}

 

Spring Boot错误处理的艺术 下面是一个自定义的示例,它通过});}" 阅读详情

相关推荐

华为昇腾Atlas200DK. CANN模型推理——目标检测结果不对(无检测结果)的问题解决

目录前言问题描述问题排查1.后处理模块问题排查2.预处理模块问题排查3.模型问题排查4.算法bug问题排查5.AI板卡问题排查6.模型精度问题排查6.模型推理问题解决:模型输入数据与预处理不同后记 前言 上周我在华为昇腾Atlas200DK中部署nanodet和yolov5时,出现了目标检测结果不对(没有检测到任何物体),困扰了整整三天,最后找到原因并圆满解决,在这里记录一下debug过程。 以上测试均在python中完成。 问题描述 第一天上午,我首先将nanodet由pytorch的.pth模型转换为.

qq_41035283的博客 5604

SpringBoot异常处理ErrorController详解

文章目录一、背景二、SpringBoot的默认异常处理BasicErrorController三、自定义错误异常 写在前面: 我是「境里婆娑」。我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信念丝毫未减,眼前这个少年,还是最初那张脸,面前再多艰险不退却。 写博客的目的就是分享给大家一起学习交流,如果您对 Java感兴趣,可以关注我,我们一起学习。 前言:ErrorController是SpringBoot调用Controller出错时的一个统一处理接口,它的实现为BasicErrorCo

境里婆娑 1万+

Protege新手必看:从安装到建模的完整指南(附推理功能详解)

本文为Protege新手提供从安装、配置到核心建模的完整实战指南。详细讲解了Java环境准备、本体项目创建、类与属性定义、个体填充等关键步骤,并重点解析了推理功能的配置与使用,帮助读者快速构建可逻辑推理的知识图谱,避开常见陷阱。

numpy6sculptor的博客 795

全局异常处理及自定义异常:ErrorController与@ControllerAdvice区别和用法

参考资料 springboot继承AbstractErrorController实现全局的异常处理 https://blog.youkuaiyun.com/qq_29684305/article/details/82286469 spring boot 原生错误处理ErrorController https://blog.youkuaiyun.com/shenyunsese/article/details...

jwf111的博客 1万+

一个响应ping包延迟偏大的问题

前段时间客户反馈一个使用pc上的命令行ping无线设备(WiFi4)时,设备平均响应时间(测试时长2小时,1秒Ping一次)相比其它机型偏慢的问题,并上传上具体的时间的Log.从log中看到,大多数包的响应还是比较快的,只是个别响应时间较长,且响应时间长的包时间几乎都是一样的100多ms.如下是部分响应时间截图. 整个2小时的测试时间里,总是时不时的出这么上102,104ms的响应时间,这直接导致了平均响应时间被拉大.于是本地测试,也发现了类似的延迟.本地测试时,现象略有...

流风回雪的博客 1万+

PaddleOCR实战:如何在CentOS 8.5上搭建高性能OCR识别环境

本文详细介绍了在CentOS 8.5系统上搭建高性能PaddleOCR识别环境的完整指南。从系统环境准备、PaddlePaddle框架部署到PaddleOCR的定制化安装与性能优化,提供了针对生产环境的解决方案,包括GPU/CPU环境配置、内核参数调优及常见问题排查,帮助用户实现高效OCR识别。

weixin_29223603的博客 349

SpringBoot实战(03):全局异常处理ErrorController

SpringBoot实战:全局异常处理ErrorController一、前言二、SpringBoot的默认异常处理BasicErrorController类的实现三、自定义全局异常处理四、自定义实现 一、前言 使用SpringBoot时,如果出现404,405,500这种报错信息时,系统会在页面中展示如下内容系统: Whitelabel Error Page This application h...

jie_ming514的博客 1万+

ROS2进程内通信:零拷贝Intra-Process原理与实战

Intra-Process通信是ROS2实现低延迟节点间数据交换的核心机制,其本质是通过C++17智能指针与零拷贝共享内存,在同一进程内绕过序列化、系统调用和上下文切换。相比传统DDS跨进程通信,它将`geometry_msgs::Twist`类消息延迟从42μs降至0.8μs,显著提升机器人实时控制性能。该技术并非自动启用,需满足同执行器、QoS严格匹配、内存所有权明确三大约束,适用于机械臂控制、视觉SLAM、图像处理流水线等对端到端延迟敏感的场景。本文聚焦ROS2原生Intra-Process通讯的原理

weixin_30619101的博客 362

springMvc中@ControllerAdvice和ErrorController接口使用

springMvc中@ControllerAdvice和ErrorController接口使用 一、简介 springMvc中对全局的处理,可以使用aop。这里介绍另外一种方式,借助springMvc的ControllerAdvice注解和ErrorController接口。 二、ControllerAdvice注解 @ControllerAdvice(直接返回请求体,可以使用@RestControllerAdvice)可以对控制器进行全局处理,通常借助@ExceptionHandler、@InitBind

panda-star的博客 827

在 PyCharm 中使用 Copilot

此外,要在 PyCharm 中使用 GitHub Copilot,您必须有效订阅 Copilot。在 PyCharm 中安装 GitHub Copilot 后,您现在可以将其用作项目的扩展。此外,它很容易安装在不同的 IDE 平台上,您还可以为特定编程语言启用 GitHub 插件。此外,按照以下步骤,您可以轻松地在 PyCharm 中安装 GitHub Copilot。此外,在 IDE 上使用 GitHub Copilot 时,您可以使用一些快捷方式。

一览无遗 1万+

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

Springboot全局异常处理:@ControllerAdvice和ErrorController

Springboot全局异常处理:@ControllerAdvice和ErrorController 目前有两种方式可以实现全局异常处理 @ControllerAdvice ErrorController 两种处理方式可以同时使用,个人理解同时使用时 @ControllerAdvice是用来捕获Controller中抛出的异常; ErrorController则是捕获未被@ControllerAdvice捕获的异常,用来做兜底异常处理; 一. @ControllerAdvice 实现 @Cont

Razera的博客 972

内容创作全流程自动化:OpenClaw+大模型搞定选题+写稿+多平台发布

本文介绍了一套基于OpenClaw的全自动化内容创作流水线方案,帮助垂直领域创作者摆脱重复劳动。该方案将内容生产拆解为选题生成、内容撰写、格式适配、多平台发布四个模块,通过工作流引擎串联执行。系统能自动采集热榜生成选题、调用大模型撰写结构化内容、适配不同平台格式要求,并通过API+浏览器自动化实现多平台发布,全程只需人工最终审核。作者分享了各模块的实现细节,包括热榜采集、内容结构化生成、Markdown转换和发布策略,并提供了工作流编排方法。这套方案能为创作者每天节省约3小时,同时保证内容质量和发布效率。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 49

springboot使用@ControllerAdvice和ErrorController实现全局异常控制。

注:该方法无法处理未进入Controller的异常,比如404和Filter中的异常 下面放一个简单的实现 @ControllerAdvice @Slf4j //lombok中的日志注解 public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) //不可预知的异常可以直接用Exception捕获 public String exceptionHandler(HttpServletResponse res

yuru974882032的博客 1280

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java异常处理(三)—Springboot全局异常处理(@ControllerAdvice和ErrorController)

介绍Springboot两种全局异常处理(@ControllerAdvice和ErrorController),附有详细代码

shang_0122的博客 1932

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringBoot实践之---处理全局统一异常的两种方法与区别(@ControllerAdvice、@ExceptionHandler 与 ErrorController类)

前言 在后端发生异常或者是请求出错时,前端通常显示如下 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri Jun 07 15:38:07 CST 2019 There was an unexpected er...

luckykapok918的专栏 2995

全局异常拦截:@ExceptionHandler、@ControllerAdvice和ExceptionController

目录1、问题2、@ExceptionHandler和@ControllerAdvice2.1、Controller层全局异常声明2.2、测试2.3、测试结果2.4、小结3、ErrorController3.1、场景3.2、自定义ErrorController子类 4、总结在Controller接口中,程序运行时难免会有很多异常。此时,最简单的做法,是通过try-catch进行异常捕获,将异常信息转换成简洁友好的信息返回给前端。但这种方式,很难看且冗余(每个异常的地方都需要try-catch),如下所示:

weixin_37672801的博客 5075

ControllerAdvice和ErrorController的用法

介绍 在Java中异常可以分为Error和Exception,@ControllerAdvice用来处理系统中的Exception,ErrorController处理系统中的Error。 ErrorController 在项目中我们遇到404找不到的错误、或者500服务器错误都需要配置相应的页面给用户一个友好的提示,而在Spring Boot中我们需要如何设置。 当系统出现404或者405等错误信息时,springboot默认的访问路径为/error,所以实现ErrorController并重写。 Err

王国隆的技术博客 2144

Springboot使用@ControllerAdvice全局异常处理含Filter

Springboot使用@ControllerAdvice全局异常处理,包括处理FIlter抛出的异常

stareylix的博客 1090

springboot全局异常处理_SpringBoot处理全局统一异常

阅读文本大概需要3分钟。使用@ControllerAdvice和@ExceptionHandler注解基于ErrorController类实现0x01:使用@ControllerAdvice和@ExceptionHandler注解@Slf4j@ControllerAdvicepublicclassGlobalExceptionHandler{@ResponseBody@Except...

weixin_39652646的博客 232

SpringBoot全局异常处理,捕获SQLIntegrityConstraintViolationException

SpringBoot全局异常处理,捕获SQLIntegrityConstraintViolationException

weixin_58622844的博客 2396

【项目实战】-全局异常处理

ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理。这里ControllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行切面环绕的,而具体的业务织入方式则是通过结合其他的注解来实现的。

海的那边,还是海吗 1139

SpringBoot实现统一异常处理

分享知识 传递快乐 Spring Boot 实现统一异常处理的方法主要有以下两种: 使用@ControllerAdvice和@ExceptionHandler注解 使用ErrorController类来实现 1、使用@ControllerAdvice和@ExceptionHandler注解 import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bin..

旷野历程 1519

Java中的全局异常处理

SpringBoot中的全局异常处理全局异常处理SpringBoot的全局异常处理@ControllerAdvice注解 全局异常处理 ErrorController接口和 @ControllerAdvice注解比较: 相同点: 两者都是Spring项目中的全局异常处理方式 不同点: 捕获异常位置不同: ErrorController接口捕获全局所有的异常,包括控制器方法中抛出的异常 @ControllerAdvice注解只能捕获控制器方法中抛出的异常 .@Controller注解无法捕获Fi

攻城狮Chova的博客 1705

【SpringBoot3】SpringBoot中实现全局统一异常处理

2、@ControllerAdvice 只能捕获进入 Controller 层的异常,比如404,401等错误无法捕获。@ControllerAdvice 表示这是一个控制器增强类,当控制器发生异常且符合类中定义的拦截异常类,将会被拦截。3、ErrorController,该方式几乎可以处理所有的异常,包括未进入控制器的错误,比如404,401等错误。1、@ControllerAdvice 定义多个拦截方法,拦截不同的异常类,并且可以获取抛出的异常信息。当然,我们可以不返回页面,只返回异常信息。

wufaqidong1的博客 3554

Spring Boot全局异常处理

全局异常处理器是一个用于处理应用程序中未处理的异常的组件。当应用程序抛出未处理的异常时,全局异常处理器会捕获该异常并执行相应的操作,例如记录日志、返回错误信息等。在Spring Boot中,我们可以通过实现接口或使用注解来创建全局异常处理器。除了处理应用程序中的未处理异常之外,我们还可以自定义异常,并在全局异常处理器中处理这些异常。自定义异常可以帮助我们更好地组织代码,并提高代码的可读性和可维护性。在上面的示例中,我们定义了一个类,该类继承自类。

果酱 の 博客 4375
上一篇: ApplicationContextAware获取上下文
下一篇: mysql中的FEDERATED引擎使用
若往夕之
博客等级 码龄9年 20粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值