【问题标题】:Custom Exception Handling/Error Handling in SpringSpring中的自定义异常处理/错误处理
【发布时间】:2014-12-08 11:00:35
【问题描述】:

我的应用程序 - Java 1.6、Spring 3.1.2、Hibernate 4.1.1、Thymeleaf 2.0.15 目前在我的应用程序中,没有实现任何exception/error 处理机制。我以普通的文化方式处理异常。但现在我需要介绍一个"Robust Error Handling Mechanism"。请建议我使用示例实现自定义错误/异常处理机制。

感谢并感谢像您这样的专家。

【问题讨论】:

  • 你应该考虑使用@ControllerAdvice检查全局错误处理stackoverflow.com/questions/26578889/…
  • 但是我需要实现一些通用自定义异常,以便可以在应用程序中抛出相同的异常。

标签: java spring spring-mvc


【解决方案1】:

我会让它更容易格式化。当您说“但是我需要实现一些通用自定义异常,以便可以在整个应用程序中抛出相同的异常”时。这是我如何理解它以及 @ControllerAdvice 直接处理的东西,但它仅适用于控制器。再说一遍,所有底层都可以在方法上声明 throws,并将其委托给 Controller 进行异常处理。例如,以下将是处理您的自定义异常的错误处理控制器

@ControllerAdvice
public class GlobalErrorHandler {

    @ExceptionHandler(value = VermaException.class)
    @ResponseBody
    public String heightError(VermaException ex) {
        return "error";
    }

}

你的例外

public class VermaException extends Exception {
}

现在,无论何时从控制器类抛出异常,它都会在您的 GlobalErrorHandler 中被捕获和处理。

再次粘贴引用http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

评论后更新

@ControllerAdvice 是在 3.2 版本中添加的,对于早期版本,您可以拥有一个由控制器扩展的 CommonController,其中包含错误处理程序方法,例如每个控制器解决方案

@Controller
public class CommonController {

    @ExceptionHandler
    public @ResponseBody String handle(VermaException e) {
        return "error";
    }
}

扩展控制器

@Controller
public class ExceptionController extends CommonController {

    @RequestMapping("/exception")
    public @ResponseBody String exception() {
        throw new VermaException();
    }

}

【讨论】:

  • 我使用的是 Spring 3.1.2,似乎没有 @ControllerAdvice 注释
  • 我已经用可能的解决方案更新了答案。 3.2版本发布了很多改进,特别是在测试支持方面,所以如果可以的话,尝试升级。
  • 我从写有 ExceptionHandler 的 CommonController 继承了我的 Controller,但是在从 Controller 抛出异常时,Controller 没有在 CommonController 中调用 ExceptionHandler。
  • 不确定您面临的问题是什么,我添加了一个简单的工作示例。您应该能够复制/粘贴和测试
猜你喜欢
  • 2021-07-10
  • 2022-01-12
  • 2013-07-02
  • 2015-10-18
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多