Spring boot 异常处理程序在spring启动应用程序上不工作,@RestControllerAdvice从未被调用,我使用的是低级客户端
正在尝试设置全局自定义异常处理机制,该机制依赖于能够处理异常的@RestControllerAdvice @RestControllerAdvice**异常处理程序根本不启动。 在这里,我使用的是低级客户端 我设置了以下控制器建议,以返回错误条件的API合同: 我试图在下面添加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
@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'
}