前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Web MVC框架(六) 异常处理

Spring Web MVC框架(六) 异常处理

作者头像
乐百川
发布2022-05-05 19:46:22
3210
发布2022-05-05 19:46:22
举报

Spring Web MVC对异常处理有着完善的支持,我们可以捕获控制器中抛出的任何异常,然后按照异常类型将异常信息映射到某个视图文件,向用户显示对应的信息。

@ExceptionHandler

最简单的办法就是使用@ExceptionHandler注解。它可以定义到一个控制器中,处理该控制器抛出的异常。@ExceptionHandler注解接受一个Class,指定捕获哪个异常。如果不指定这个值,则捕获方法参数列表中的所有异常。

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

    @ExceptionHandler(IOException.class)
    public String handleException(IOException exception, Model model) {
        model.addAttribute("message", exception.getMessage());
        model.addAttribute("detail", exception);
        return "exception";
    }

    @RequestMapping("/throw")
    public String throwException() throws IOException {
        if (true)
            throw new IOException("蛋疼,遇到了一个IO错误");
        return "exception";
    }
}

该注解标注的方法也可以用于控制器通知(ControllerAdvice),应用到多个控制器上。

异常解析器

另外一种异常处理办法就是使用异常解析器。我们可以使用 SimpleMappingExceptionResolver将异常类型和异常视图关联起来。也可以自己实现一个HandlerExceptionResolver用于处理异常。使用方法可以参考这篇博客Spring MVC 系统异常处理方式及性能对比

Spring默认情况下也会注册一个异常解析器DefaultHandlerExceptionResolver,将Spring异常映射到4XX和5XX错误,详情参见Spring参考文档 22.11.3. Handling Standard Spring MVC Exceptions

使用@ResponseStatus注解业务异常

我们的业务代码的异常可以使用@ResponseStatus注解。当这样的异常抛出时,ResponseStatusExceptionResolver会捕获这些异常并设置相应的错误代码。Spring默认会注册一个ResponseStatusExceptionResolver,我们不需要手动设置即可使用。

@ResponseStatus(HttpStatus.NOT_FOUND) public class MyCustomException extends RuntimeException { public MyCustomException() { super(); }

代码语言:javascript
复制
public MyCustomException(String msg) {
    super(msg);
}

}

自定义Servlet容器错误页面

我们可以直接在web.xml中定义Servlet容器的错误页面。如果使用Servlet 3.0容器的话,如果不指定错误类型,那么该页面会作为默认错误页面来应用。在Spring Web MVC中,该页面不仅可以是一个HTML或JSP页面,也可以是控制器中某个处理方法接受的URL。

代码语言:javascript
复制
<error-page>
    <location>/error</location>
</error-page>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @ExceptionHandler
  • 异常解析器
  • 使用@ResponseStatus注解业务异常
  • 自定义Servlet容器错误页面
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档