问题描述
我的 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 注释的控制器类,我们是否无法在集中的地方处理异常
解决方法
我不这么认为。
ControllerAdvice 仅在控制器返回异常时使用, 它是在控制器中的端点返回之后和实际返回响应之前存在的层,用于插入和全局处理异常,并且仅对控制器是全局的。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html
由于您没有控制器,我想 ControllerAdvice 不会帮助您。
如果你想要一个集中的错误处理机制,你必须自己围绕你的“Main”函数实现类似于控制器建议的东西,你可以有统一的异常处理响应。