学习SpringMVC(二十四)之异常处理

Posted 奔跑着的国风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习SpringMVC(二十四)之异常处理相关的知识,希望对你有一定的参考价值。

SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射,数据绑定以及目标方法执行时发生的异常。



1.在@ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象

2.@ExceptionHandler方法的入参中不能传入 Map.若希望把异常信息传导页面上,需要使用 ModelAndView作为返回值
3.@ExceptionHandler 方法标记的异常有优先级的问题.会先处理匹配度高的异常

直接上实例:

在Controller中:

<span style="font-size:18px;"><span style="font-family:SimSun;font-size:18px;">package com.cgf.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@RequestMapping(value="/springmvc")
@Controller
public class MyException {	
	<span style="color:#ff0000;">@ExceptionHandler(value={Exception.class})</span>
	public ModelAndView myException(Exception ex){
		ModelAndView mv=new ModelAndView("error");
		mv.addObject("exception", ex);
		return mv;
	}	
	@RequestMapping(value="/testException")
	public String testException(@RequestParam(value="id")int id){
		System.out.println("id=:"+10/id);
		return "success";		
	}

}</span></span>
在sprin gmvc.xml中:需要配置<mvc:annotation-driven/>

在index.jsp中;

<span style="font-size:18px;"><span style="font-family:SimSun;">  <h1>异常处理</h1>
  <a href="springmvc/testException?id=1">Test Exception</a>
  <br></span></span>
4.@ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler 方法来出来当前方法出现的异常, 

则将去@ControllerAdvice 标记的类中查找 @ExceptionHandler 标记的方法来处理异常.

<span style="font-size:18px;">package com.cgf.springmvc.handlers;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

<span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">@ControllerAdvice</span></span>
public class MyArithmeticException {
	
	@ExceptionHandler(value={ArithmeticException.class})
	public ModelAndView myException(Exception ex){
		System.out.println("MyArithmeticException");
		ModelAndView mv=new ModelAndView("error");
		mv.addObject("exception", ex);
		return mv;
	}

}</span>

5.ResponseStatusExceptionResolver处理用@ResponseStatus标识的异常类或异常方法

<span style="font-family:SimSun;font-size:18px;">package com.cgf.springmvc.handlers;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(reason="用户名与密码不匹配",value=HttpStatus.FORBIDDEN)
public class UserNameNotMatchPasswordException extends RuntimeException{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
}</span>

6.配置SimpleMappingExceptionResolver来映射异常

<bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionAttribute" value="exception"></property>
<property name="exceptionMappings">
	<props>
	<!-- 全限定名、视图名 -->
		<prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
	</props>
</property>
</bean>





以上是关于学习SpringMVC(二十四)之异常处理的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC(十四):SpringMVC异常处理

Nginx详解二十四:Nginx深度学习篇之灰度发布

《C#零基础入门之百识百例》(二十)异常处理 -- 除数为0

《C#零基础入门之百识百例》(二十四)数组排序 -- 插入排序

Python学习(二十四)—— 前端基础之Bookstrap

SpringMVC4.x学习系列之全局异常处理