springmvc 异常处理

springmvc使用handlerExceptionRosolver来处理异常

在默认情况下springmvc加载的异常处理器有:

ExceptionHandlerExceptionResolver:主要用来处理使用@ExceptionHandler注解定义的方法

ResponseStatusExceptionResolver:

DefaultHandlerExceptionRosolver:

 

一、ExceptionHandlerExceptionResolver

处理使用@ExceptionHandler注解定义方法

注意点:

1、@ExceptionHandler定义的方法可以加入Exception参数 ,该参数即对应发生异常的对象。

2、@ExceptionHandler定义的方法不可以使用map作为参数,如果要把异常信息返回到错误页面上,需要返回ModelAndView

3、如果一个类里面有多个@ExceptionHandler标记的方法,那么springmvc会调用最接近于发生异常的类型的方法

4、如果当前Handler中没有@ExceptionHandler方法来处理当前的异常,则将会@ControllerAdvice中去找@ExceptionHandler标记的方法

 

例子:

目标方法:

@RequestMapping("testExceptionHandlerExceptionResolver")
    public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
        System.out.println("result = " + 10 / i);
        return "success";
    }

处理异常的方法:

@ExceptionHandler({ Exception.class })
    public ModelAndView testHandlerException(Exception exception) {
        System.out.println("出错了:" + exception);
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("exception", exception);
        return modelAndView;
    }

页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error Page</title>
</head>
<body>
<h4>Error Page</h4>

<h3>${exception }</h3>
</body>
</html>

 

 也可以使用@ControllerAdvice注解处理异常的类,可以统一处理异常:

package com.hy.springmvc.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;


@ControllerAdvice
public class HandleException {
    @ExceptionHandler({ Exception.class })
    public ModelAndView testHandlerException(Exception exception) {
        System.out.println("[1]出错了:" + exception);
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("exception", exception);
        return modelAndView;
    }
}

 

 

 

二、ResponseStatusExceptionRosolver

处理@ReponseStatus标记的异常类或异常方法

@ResponseStatus注解有两个属性reason和value

 value指返回到页面上的错误码,reason指打印到页面上的错误原因

当目标方法中抛出异常类对应的异常时会返回相应的错误页面

如果在目标方法上使用了@ResponseStatus注解那么一定会返回错误页面,即使没有抛出相应的异常!

 

 

三、DefaultHandlerExceptionRosolver

处理springmvc里面的一些特定异常

 

四、SimpleMappingExceptionResolver

对所有异常统一处理,可以在配置文件中配置异常的类名和对应的视图名称,可以在错误页面中打印出错误的日志信息。

 

posted on 2017-01-25 21:11  _故乡的原风景  阅读(154)  评论(0编辑  收藏  举报