【问题标题】:Spring boot exception handling for specific annotated methods特定注解方法的 Spring Boot 异常处理
【发布时间】:2016-11-10 03:28:06
【问题描述】:

我们的 Spring Boot 控制器具有由 ajax 调用的方法以及呈现 CRUD 模板的标准方法。我们希望能够用一个注解来注解我们所有的 ajax 方法,这样无论抛出什么类型的异常,我们都可以返回一个 ui 可以处理的响应。

我一直在研究 ControllerAdvice 和 ExceptionHandler 注释,但我认为它们都不能按照我们的意图使用。 ControllerAdvice 只能涵盖整个控制器,因此任何异常处理也将涵盖非 ajax 方法。同样,ExceptionHandler 注释将处理来自这两种方法的异常。

目前的想法是将ajax和CRUD这两种方法拆分为单独的控制器。有没有其他方法可以做到这一点?

【问题讨论】:

    标签: java spring spring-mvc spring-boot annotations


    【解决方案1】:

    我认为这在 Spring 中并不是那么容易/直接(或者至少就我目前的 Spring 知识而言)。

    我们希望能够用一个单一的注解我们所有的 ajax 方法 注释

    除了将 ajaxMethods 分离到另一个控制器中之外,我还能想到另一种方法。

    1.声明你自己的异常类,比如myAjaxException

    2.不要在控制器中处理这个异常,当你在你的ajax方法中遇到任何异常时抛出它。

      try{
             //.... 
          }catch(Exception ex){
              throw new myAjaxException("this is myAjaxException blah blah blah");
          }
    

    3.通过如下实现HandlerExceptionResolver来拦截myAjaxException。

    在 DispatcherServlet 的应用程序中声明的任何 Spring bean 实现 HandlerExceptionResolver 的上下文将用于 拦截并处理任何异常在 MVC 系统中引发并且 由控制器处理。

    public class AjaxExceptionResolver implements HandlerExceptionResolver {
    
       public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);
      if (ex instanceof myAjaxException) {
                  //return response to UI
        }
    
      }
    

    【讨论】:

    • 我也考虑过,但这意味着将每个 ajax 方法包装在一个 try/catch 块中,这是我们试图避免的
    • 我知道,在我们找到更好的解决方案之前,我的解决方案可能是另一种“变通办法”。
    猜你喜欢
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2023-03-28
    • 2021-07-10
    • 2015-02-23
    • 2016-09-29
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多