【SpringMVC】 4.2 异常处理

SpringMVC学习记录

注意:以下内容是学习 北京动力节点SpringMVC视频后所记录的笔记、源码以及个人的理解等,记录下来仅供学习

第4章 SpringMVC 核心技术 4.2异常处理

 SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。

异常处理步骤:

新建maven web项目

加入依赖

新建一个自定义异常类 MyUserException , 再定义它的子类NameException ,AgeException

在controller抛出NameException , AgeException

创建一个普通类,作用全局异常处理类
(1). 在类的上面加入@ControllerAdvice
(2). 在类中定义方法,方法的上面加入@ExceptionHandler

创建处理异常的视图页面

.创建springmvc的配置文件
(1).组件扫描器 ,扫描@Controller注解
(2).组件扫描器,扫描@ControllerAdvice所在的包名
(3).声明注解驱动

项目结构:

【SpringMVC】 4.2 异常处理

4.2.1 @ExceptionHandler 注解

 使用注解@ExceptionHandler可以将一个方法指定为异常处理方法。该注解只有一个可 选属性value,为一个Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹 配的异常。
 而被注解的方法,其返回值可以是ModelAndView、String,或void,方法名随意,方法 参数可以是 Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会 自动为这些方法参数赋值。
对于异常处理注解的用法,也可以直接将异常处理方法注解于Controller之中。

(1) 自定义异常类

 定义三个异常类:NameException、AgeException、MyUserException。其中 MyUserException 是另外两个异常的父类。
MyUserException.java

package com.bjpowernode.exception; public class MyUserException extends Exception { public MyUserException() { super(); } public MyUserException(String message) { super(message); } }

AgeException.java

package com.bjpowernode.exception; //当年龄有问题时,抛出的异常 public class AgeException extends MyUserException { public AgeException() { super(); } public AgeException(String message) { super(message); } }

NameException.java

package com.bjpowernode.exception; //表示当用户的姓名有异常,抛出NameException public class NameException extends MyUserException { public NameException() { super(); } public NameException(String message) { super(message); } } (2) 修改 Controller 抛出异常

MyController.java

package com.bjpowernode.controller; import com.bjpowernode.exception.AgeException; import com.bjpowernode.exception.MyUserException; import com.bjpowernode.exception.NameException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.ws.RequestWrapper; /** * @RequestMapping: * value : 所有请求地址的公共部分,叫做模块名称 * 位置: 放在类的上面 */ @Controller public class MyController { @RequestMapping(value = "/some.do") public ModelAndView doSome(String name,Integer age) throws MyUserException { //处理some.do请求了。 相当于service调用处理完成了。 ModelAndView mv = new ModelAndView(); //try { //根据请求参数抛出异常 if (!"zs".equals(name)) { throw new NameException("姓名不正确!!!"); } if (age == null || age > 80) { throw new AgeException("年龄比较大!!!"); } //}catch(Exception e){ // e.printStackTrace(); //} mv.addObject("myname",name); mv.addObject("myage",age); mv.setViewName("show"); return mv; } } (3) 定义异常请求以及响应页面

请求页面:
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "http://www.likecs.com/"; %> <html> <head> <title>Title</title> <base href="http://www.likecs.com/<%=basePath%>" /> </head> <body> <p>处理异常的,全局异常处理</p> <form action="some.do" method="post"> 姓名:<input type="text"> <br/> 年龄:<input type="text"> <br/> <input type="submit" value="提交请求"> </form> </body> </html>

响应页面
ageError.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ageError.jsp <br/> 提示信息:${msg} <br/> 系统异常消息:${ex.message} </body> </html>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszxy.html