【问题标题】:spring boot application exception handler which don't have controller没有控制器的spring boot应用程序异常处理程序
【发布时间】:2021-06-27 13:36:05
【问题描述】:

我的 Spring Boot 应用程序是没有控制器的独立应用程序。我正在从 Spring Boot 应用程序的 main 方法调用服务层。

我尝试在我的班级中使用@ExceptionHandler @ControllerAdvice 注释,如下所示。但是我的异常处理程序方法永远不会得到控制

package com.test.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

    @ControllerAdvice
    public class MyExceptionHandler {
    
        @ExceptionHandler(NullPointerException.class)
        public void handleNullpointerExcetion() {
            System.out.println("Handling Null pointer exception");
        }
    }

也尝试了包名,我需要在 @ControllerAdvice 中扫描但它不起作用

@ControllerAdvice("com.test.utility")
    public class MyExceptionHandler {
    
        @ExceptionHandler(NullPointerException.class)
        public void handleNullpointerExcetion() {
            System.out.println("Handling Null pointer exception");
        }
    }

如果我没有使用@RestContoller 或@Controller 注释的控制器类,我们是否无法在集中位置处理异常

【问题讨论】:

  • 控制器建议是与 Controllers 和 RestControllers 一起使用。
  • ok.. 所以我们不能使用@controllerAdvice 和@ExceptionHandler 对没有API/控制器类的应用程序使用集中式异常处理。 @西蒙·马丁内利
  • 您应该使用链接问题中的方面

标签: spring-boot exception exceptionhandler


【解决方案1】:

我不这么认为。

ControllerAdvice 仅在控制器返回异常时使用, 它是在控制器中的端点返回之后和实际返回响应之前存在的一个层,用于插入和全局处理异常,并且仅对控制器是全局的。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html

由于您没有控制器,我想 ControllerAdvice 将无法帮助您。

如果你想要一个集中的错误处理机制,你必须自己围绕你的“Main”函数实现类似于控制器建议的东西,你可以对它有统一的异常处理响应。

【讨论】:

  • ok.. 所以我们不能使用@controllerAdvice 和@ExceptionHandler 对没有API 暴露/控制器类@Hesham Amer 的应用程序使用集中式异常处理
  • 围绕 Main 方法?当您将其作为可执行 JAR 启动时,它不会被调用。
  • @Simon,我以为JAR的执行就是Main函数的执行。我的意思是这样的 static void main(String[] args){ try { //Main code here } catch ( all your exceptions and handling ) { } } 这不会作为 JAR 执行吗?
  • 问题是你的应用程序可能是多线程的,然后catch就不会被执行。你应该为你的服务类创建一个切面
  • 我不确定@Simon 的多线程部分,我没有听到关于多线程的原始问题的任何消息。在我看来,除非那里发生了一些未处理的线程,否则所有异常都会被捕获。我已经阅读了一些关于 Aspect 注释的内容,看来这也是一个非常好的主意。感谢您关注它。参考链接:docs.spring.io/spring-framework/docs/4.3.15.RELEASE/…
猜你喜欢
  • 2015-07-12
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 2022-11-25
  • 2018-07-18
相关资源
最近更新 更多