springMVC—异常处理
来源:互联网 发布:sql having用法例子 编辑:程序博客网 时间:2024/05/29 13:12
springMVC——异常处理
springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——ExceptionHandler。
1、实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现——DefaultExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截处理。
package handlerExceptionResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; //全局异常处理器 public class handlerExceptionResolver implements HandlerExceptionResolver{ //系统抛出的异常 @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //handler就是处理器适配器要执行的Handler对象(只有method) //解析出异常类型。 //如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示。 CustomException customException=null; if(ex instanceof CustomException){ customException=(CustomException)ex; }else{ //如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)。 customException=new CustomException("未知错误"); } //错误信息 String message=customException.getMessage(); ModelAndView modelAndView=new ModelAndView(); //将错误信息传到页面 modelAndView.addObject("message",message); //指向到错误界面 modelAndView.setViewName("error"); return modelAndView; } }
然后在项目的配置文件中添加:
<bean id="exceptionResolver" class="所在包名.MyHandlerExceptionResolver"/>
这样就完成了异常的捕捉和处理。
2.我们介绍了第一种捕捉处理异常方式,但是第一种方式需要在配置文件中进行配置,有的时候我们会觉得配置文件内容太多太乱,那么我们就可以借助@ExceptionHandler注解来实现零配置的异常捕捉和处理。
首先,在我们项目的包com.demo.web.controllers中为controller建立一个父类BaseController,内容如下:
package com.demo.web.controllers;import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;import org.springframework.web.bind.annotation.ExceptionHandler;public abstract class BaseController { @ExceptionHandler public String exception(HttpServletRequest request, Exception e) { //添加自己的异常处理逻辑,如日志记录 request.setAttribute("exceptionMessage", e.getMessage()); // 根据不同的异常类型进行不同处理 if(e instanceof SQLException) return "testerror"; else return "error"; } }其次,修改项目中HelloWorldController让它继承于BaseController以便进行测试:
@Controllerpublic class HelloWorldController extends BaseController{这样就完成了异常的捕捉和处理。//@AuthPassport@RequestMapping(value={"/index","/hello"})public ModelAndView index() throws SQLException{ throw new SQLException("数据库异常。"); /*ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "Hello World!"); modelAndView.setViewName("index"); return modelAndView;*/}}
阅读全文
0 0
- springMVC—异常处理
- springmvc——异常处理
- Springmvc异常处理【Springmvc】
- springMVC异常处理
- SpringMVC中的异常处理
- springmvc 异常处理
- springMVC 全局异常处理
- springMVC之异常处理
- SpringMVC的异常处理
- SpringMVC异常处理
- springMVC的异常处理
- SpringMvc的异常处理
- springMVC全局异常处理
- springMVC之异常处理
- springMVC之异常处理
- SpringMVC-15 异常处理
- SpringMVC 常见异常处理
- SpringMVC 异常处理
- gctf-webshell相关 6.24
- 剑指offer——平衡二叉树
- Android 布局错乱 Android花屏
- 每个月的第一天时间戳 和 最后一天时间戳 (默认从本月开始)输入参数改变月份
- 50 个 Java 开发常见错误及规避技巧 (Part 1)(1-20)
- springMVC—异常处理
- IntelliJ Idea 常用快捷键列表
- Struts2 global_results 全局结果集
- 求数组子数组之和的最大值
- LOJ 6041 「雅礼集训 2017 Day7」事情的相似度
- PAT+乙1003.我要通过
- 【Java】CAS机制 原子类
- Activiti 任务的签收与委托
- kotlin进阶-快速开发