用于引起/包装异常的 Spring ExceptionHandler

标签 spring spring-boot spring-mvc exception

我找不到一个好的解决方案:在我的 Spring Boot 应用程序中,作为 @ExceptionHandler 方法,我需要定义一个处理程序,不是针对特定异常,而是针对任何异常 特定异常(即包装的异常)引起。

示例:有时我会得到这个:

org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:541) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:746) ~[spring-tx-5.1.4.RELEASE.jar:5.1.4.RELEASE]    
    ... 121 common frames omitted
Caused by: custom.TechRoleException: My custom TechRoleException
    at myapp.method1[..]
    at myapp.methodOuter[..]

我的自定义 TechRoleException 是我在某些 Hibernate EventListener 的预更新方法中抛出的异常,直接的异常是持久性无法发生。

但是,尝试使用我的自定义异常的以下方法永远不会达到:

@ControllerAdvice
public class GlobalExceptionHandler {

  @ExceptionHandler(TechRoleException.class)
  public String techRoleException(HttpServletRequest request, Exception ex) {
    System.out.println("Got here");
    return "home";
  }
}

这是一个类似的帖子,但答案是错误的,没有回答这个问题: @ExceptionHandler for Wrapped Exception / getCause() in Spring

最佳答案

也许是这样的?

@ExceptionHandler(Exception.class)
public String techRoleException(HttpServletRequest request, Exception ex) {
if(ex instanceof TechRoleException) {
    System.out.println("Got here");
    return "home";
} else {
    throw ex; //or something else
}
}

关于用于引起/包装异常的 Spring ExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733426/

相关文章:

java - Spring安全和Multipart

spring - Spring Boot遮蔽了库中的Gradle依赖关系

java - 在 Spring Boot 中存储证书的最佳做法是什么?

java - Spring Boot fat jar 无法从 application.properties 中定义的绝对路径读取文件

spring - 放置在文件夹中时找不到 MessageSource 的 ResourceBundle

forms - 如何在 Spring MVC 3.0 中的表单中传递隐藏值?

java - 设计用于函数调用的 REST api

java - 通过 jpa 将两个表连接到一个 java 对象中

java - Postman 请求返回 406 错误,仍然有效

spring - 通过 @RequestMapping 名称构建的 URL 无法按自定义名称的预期工作