elasticsearch,exception,Spring Boot,Spring Mvc,elasticsearch,Exception" /> elasticsearch,exception,Spring Boot,Spring Mvc,elasticsearch,Exception" />

Spring boot 异常处理程序在spring启动应用程序上不工作,@RestControllerAdvice从未被调用,我使用的是低级客户端

Spring boot 异常处理程序在spring启动应用程序上不工作,@RestControllerAdvice从未被调用,我使用的是低级客户端,spring-boot,spring-mvc,elasticsearch,exception,Spring Boot,Spring Mvc,elasticsearch,Exception,正在尝试设置全局自定义异常处理机制,该机制依赖于能够处理异常的@RestControllerAdvice @RestControllerAdvice**异常处理程序根本不启动。 在这里,我使用的是低级客户端 我设置了以下控制器建议,以返回错误条件的API合同: 我试图在下面添加 @ExceptionHandler(value = { ResponseException.class }) public ApiErrorResponse noHandlerFoundException(Excepti

正在尝试设置全局自定义异常处理机制,该机制依赖于能够处理异常的@RestControllerAdvice

@RestControllerAdvice**异常处理程序根本不启动。 在这里,我使用的是低级客户端

我设置了以下控制器建议,以返回错误条件的API合同:

我试图在下面添加

@ExceptionHandler(value = { ResponseException.class })
public ApiErrorResponse noHandlerFoundException(Exception ex) {
    LOG.error(ex.getCause().toString());
    int status = ((ResponseException) ex).getResponse().getStatusLine().getStatusCode();
    return new ApiErrorResponse(status, "<some message depending on status code>");
}
APIRErrorResponse:

    public class ApiErrorResponse {

        private int status;
        private String message;

        public ApiErrorResponse(int status, String message) {
            this.status = status;
            this.message = message;
        }

        public int getStatus() {
            return status;
        }

        public String getMessage() {
            return message;
        }

        @Override
        public String toString() {
            return new ToStringBuilder(this).append(status)
                                            .append(message)
                                            .toString();
        }
    }

问题是当我使用第三方库执行某些操作时。

请确保正在扫描您的控制器建议

为此,您可以将控制器建议类放在spring boot应用程序主类的内部包中,这样spring boot将自动扫描所有内部包

尝试向配置类添加
@EnableWebMvc
注释


请参阅

这是因为您正试图通过
javax.validation.ConstraintViolationException处理嵌套异常
ConstraintViolationException是
org.springframework.transaction.TransactionSystemException的嵌套异常

将处理程序更改为
@ExceptionHandler(TransactionSystemException.class)

TransactionSystemException不是理想的解决方案,但它可以工作。此错误已在最新版本的Spring Boot版本中修复:>=2.4.0

在下面的链接中,您可以看到他们如何展开
ConstraintViolationException

或者,您可以升级到:

// Gradle Config
plugins {
    id 'org.springframework.boot' version '2.4.0'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

从Spring Boot版本开始:>=2.4.0您现在可以处理嵌套异常。

感谢您的回复。我试了两种方法都没用。这是我的场景@RestControllerAdvicer在一个模块中…而spring boot应用程序主类在B模块中。这里B有a的依赖项(比如jar)。
    public class ApiErrorResponse {

        private int status;
        private String message;

        public ApiErrorResponse(int status, String message) {
            this.status = status;
            this.message = message;
        }

        public int getStatus() {
            return status;
        }

        public String getMessage() {
            return message;
        }

        @Override
        public String toString() {
            return new ToStringBuilder(this).append(status)
                                            .append(message)
                                            .toString();
        }
    }
// Gradle Config
plugins {
    id 'org.springframework.boot' version '2.4.0'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}