当前位置: 首页 > 知识库问答 >
问题:

局部和全局Spring控制器异常处理

罗伟兆
2023-03-14

我想要一些关于如何实现以下目标的建议。我不提供代码,因为我的问题是理论上的,但应要求我可以。所以情况是这样的:

  • 我有多个控制器,每个控制器都可以抛出XYException
  • 我有一个@ControllerAdvice类,其中有一个@ExceptionHandler监视XYExceptions。当它发生时,它打印出“xy”。
  • 在一个(且仅有一个)控制器中,当抛出XYException时,我希望执行一些额外的任务(比方说,执行一些只有该控制器才能执行的任务),然后我希望将异常“传递”给上面提到的全局处理程序。

我知道我可以捕获异常,在catch块中执行所需的任务,然后重新抛出异常,以便全局处理程序可以捕获它,但如果控制器中有23个方法可能抛出XYExceptions,而我不想在所有23个方法中都放置try-catch块,该怎么办?

实现这一点的清洁Spring方式是什么?

共有1个答案

华谭三
2023-03-14

您可以使用aop来实现这一点。您将编写一个方法来拦截控制器中的方法,当它们抛出异常时,AOP方法将运行,您可以执行您的操作,然后异常将进入处理程序类。

要实现这一点,您应该有一个类,并用@aspect@component对其进行加性,然后用@afterthrowth加性一个方法,并设置当给定方法抛出异常时将截获的切入点。

有关更多信息,请参阅面向方面编程和AspectJ

 类似资料:
  • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

  • 使用Spring Boot有几种方法可以解决这个问题。并且我选择将@ControllerAdvice与@ExceptionHandler方法一起使用。 因此,当抛出异常时,新的处理程序会捕获异常并返回一个包含消息的漂亮的json,如: 实施-没那么难。最难的部分是测试。 欢迎有任何想法。谢谢你!

  • 我对spring mvc非常陌生抱歉,如果我问的是一个基本问题,我需要在我的spring 4 MVC,Jersey项目中维护全局异常处理,并向IOS移动应用程序返回JSON响应。现在,通过使用@ControllerAdvice和@ExceptionHandler,我创建了一个如下所示的类 请建议,如果上述方法是正确的,或有任何替代方法来处理所有发生在控制器,服务和DAO层的异常。

  • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware

  • 在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。 今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多

  • 我正在使用Spring Cloud Gateway Greenwich.sr1和Spring Boot 2.1.5。我正试图为我的下游服务创建一个网关。网关的部分工作是为下游请求提供全局错误页。当下游服务返回HTTP 403响应时,我希望网关提供一个合适的错误页面。 有没有不同的方法让它起作用?