关于SpringMVC异常处理的实践总结
——我一直不太信任自己的记忆力,所以我把它们都写下来
在web项目中,用户访问了无效资源、系统内部错误等都需要给用户相应的回馈,比如说下面的404错误,我相信下面错误提示是用户和你都不想看到的。
类似异常有404,405,406,500 等,具体含义可以自行百度。这些异常处理可以让美工做几个漂亮的页面,然后在web.xml添加如下
<error-page> <error-code>404</error-code> <location>/albert/page/404</location> </error-page> <error-page> <error-code>405</error-code> <location>/albert/page/405</location> </error-page> <error-page> <error-code>500</error-code> <location>/albert/page/500</location> </error-page> <error-page> <exception-type>org.apache.shiro.authz.AuthorizationException</exception-type> <location>/albert/page/401</location> </error-page>
如果是是controller抛出的异常呐?
有两种方法来处理controller异常。
1.继承HandlerExceptionResolver,然后在mvc配置文件中添加这个异常resolver
/** * @author albert * 异常处理,不赞成使用,推荐使用@ExceptionHandler </br> * 需要在mvc配置文件中添加 * <bean id="exceptionResolver" class="com.fh.resolver.MyExceptionResolver"></bean> */ @Deprecated public class MyExceptionResolver implements HandlerExceptionResolver{ Logger logger = Logger.getLogger(this.getClass()); public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ex.printStackTrace(); ModelAndView mv = new ModelAndView("error"); mv.addObject("exception", ex.toString().replaceAll("\n", "<br/>")); return mv; } }
2.用注解的方式,一般都是定义一个抽象类,让所有的controller都继承它,controller方法捕获异常后在catch中都抛出同样的自定义异常
package com.albert.web.controller; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestController; public class BaseController { Logger logger = Logger.getLogger(this.getClass()); @ExceptionHandler public String exception(HttpServletRequest request,HttpServletResponse res, Exception e) { logger.info("异常处理:"+e.getMessage()); RestController restController = AnnotationUtils.findAnnotation(this.getClass(), RestController.class); if(restController==null){//返回页面 request.setAttribute("exceptionMessage", e.getMessage()); return "500"; }else{ //如果controller有@RestController注解,则返回json PrintWriter writer = null; try { writer = res.getWriter(); } catch (IOException e1) { e1.printStackTrace(); } String json = "json_error"; writer.write(json); writer.flush(); return null; } } }
博主建议用第二种方式来统一处理异常,第一种方式会比较乱
相关推荐
springmvc异常处理的博文如下: http://blog.csdn.net/dlf123321/article/details/50756003
异常一层一层的向上抛出,但是开发人员肯定不想要用户看到代码出错,因此需要将异常屏蔽了,SpringMVC提供了异常处理的手段。
12SpringMVC异常处理.md
SpringMVC中异常处理机制,简单案例,里面有详细说明以及博客说明。
springmvc返回json的全局异常统一处理demo,有问题可以留言。
SSM笔记-SpringMVC的异常处理,包含了ExceptionHandler注解、ResponseStatusExceptionResolver、DefaultHandlerExceptionResolver、SimpleMappingExceptionResolver的使用和试验
在本篇文章里小编给大家整理的是关于SpringMVC异常处理相关知识点内容,需要的朋友们学习下。
Springmvc请求处理方法参数Springmvc请求处理方法参数
Maven+SpringMVC实现统一异常处理
本文档主要介绍了SpringMVC的ModelAndView机制,使用SpringMVC实现文件上传,下载以及全局异常处理机制
springmvc跨域处理,和过滤器方式跨域处理的主要代码,整体系统基于springboot框架搭建
springMVC3学习(八)--全局的异常处理(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/26286435
关于SpringMVC的基础知识点总结,SpringMVC参数绑定6种方式,使用不同的方式跳转页面,后台处理json格式的数据,SpringMVC框架简介,SpringMVC的入门案例等
采用springmvc+mybatis,搭建部分大致跟网上其他资料差不多,唯一不同的加入了统一错误处理,为了方便开发人员开发,所有错误码用一张表存在数据库中,然后由应用将整表缓存,缓存采用的spring自带的cache,开发中...
本视频针对博客内容,讲解springMVC框架中的统一异常处理的知识点和实例,以及500错误和404错误异常处理上的区别,简单易懂,言简意赅。
通过aop拦截获取json请求数据,对数据进行处理判断,如果不合法则抛出异常,配置全局异常处理类,在异常处理类中直接将处理结果返回调用处,减少每次在方法中解析json数据然后在判断,减少代码冗余
极客学院java中级课程,SpringMVC系列教材——SpringMVC 中的拦截器与异常处理
SpringMVC入门很简单之异常处理,具体参考博文:http://www.cnblogs.com/liukemng/tag/SpringMVC/
SpringMVC通过HandlerExceptionResolver接口来处理程序的异常,包括Handler映射、数据绑定和目标方法执行时发生的异常。 主要测试HandlerExceptionResolver的具体实现类的具体用法
SpringMVC笔记内容:第一天(SpringMVC的概述、SpringMVC与Struts2优势分析、重要组件、运行原理、SpringMVC环境搭建、@RequestMapping注解详解、...第三天(SpringMVC异常处理、自定义拦截器、拦截器栈) --author: