没有控制器的spring boot应用程序异常处理程序

问题描述

我的 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”函数实现类似于控制器建议的东西,你可以有统一的异常处理响应。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...