首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring 3控制器异常处理程序实现问题

Spring 3控制器异常处理程序实现问题
EN

Stack Overflow用户
提问于 2010-04-14 05:45:23
回答 3查看 20.3K关注 0票数 7

我希望实现一个"ExceptionController“来处理在执行其他控制器的方法时抛出的异常。我没有在我的应用程序上下文中指定任何HandlerExceptionResolver,因此根据API documentation,应该启动AnnotationMethodHandlerExceptionResolver。我在源代码中进行了验证。那么为什么下面的方法不起作用呢?

代码语言:javascript
运行
复制
@Controller
public class ExceptionController {

  @ExceptionHandler(NullPointerException.class)
  public ModelAndView handleNullPointerException(NullPointerException ex) {
    // Do some stuff
    log.error(logging stuff)
    return myModelAndView;
  }
}

@Controller
public class AnotherController {

  @RequestMapping(value="/nullpointerpath")
  public String throwNullPointer() {
    throw new NullPointerException();
  }
}

我在调试日志中看到,三个默认的异常处理程序被要求处理异常,但是什么也没有做,我看到"DispatcherServlet - and‘t complete request“。接着是用户正在显示的堆栈跟踪和500内部错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-14 07:00:57

确保您的异常处理程序返回存在/映射到处理程序的视图。

票数 5
EN

Stack Overflow用户

发布于 2010-12-29 16:01:54

您应该将您的异常处理程序写到您想要处理的同一个类中,如下所示。

代码语言:javascript
运行
复制
@Controller
public class AnotherController {
    @ExceptionHandler(NullPointerException.class)
    public ModelAndView handleNullPointerException(NullPointerException ex) {
        // Do some stuff.
        log.error(logging stuff)
        return myModelAndView;
    }

    @RequestMapping(value="/nullpointerpath")
    public String throwNullPointer() {
        throw new NullPointerException();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-04-14 06:20:40

我不认为这是一个好的设计。Spring中的控制器处理HTTP请求并映射到URL。我不认为“例外”适用于这两种情况。对我来说,这感觉像是对Spring的滥用。

例外不是HTTP请求。您不能将异常映射到URL。因此,我得出的结论是,控制器并不打算被视为异常处理程序。

控制器是Spring API的一部分,但是您的设计没有按预期使用它们,所以这就是它不能工作的原因。重新思考你的设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2633451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档