Spring-MVC异常处理

Spring-MVC异常处理

一般处理发生错误的方法

 @RequestMapping(value = "/hello3.action")
    protected String handleHello3(Model model,String username,int age) throws Exception {
        System.out.println(username+"===="+age);

        if ("myerror".equals(username)){
            throw new MyError("发生了自定义异常");
        }else if ("error".equals(username)){
            throw new Exception("发生了通用异常");
        }
        //ModelAndView是model和view的合并体,model:用于请求之间传递参数的,类似于request。view:显示具体页面
        //ModelAndView modelAndView = new ModelAndView();
        model.addAttribute("username",username);//类似与request.setAttribute
        model.addAttribute("age",age);
        return "show";
    }

XML文件里

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!--通用异常   固定格式-->
        <property name="defaultErrorView" value="commonError"/>

        <property name="order" value="0"/><!--调整优先级-->
        <!--中定义异常  自定义格式-->
        <property name="exceptionMappings">
            <props>
                <prop key="com.etc.exception.MyError">myError</prop>
            </props>
        </property>
        <!--异常信息-->
        <property name="exceptionAttribute" value="ex"/>
    </bean>

Spring MVC处理异常有3种方式:

•(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;

•(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;

•(3)使用@ExceptionHandler注解实现异常处理

一、方法一

在XML文件里添加写的异常类
<!--全局异常处理器 方法一-->
    <bean class="com.etc.exception.MyExceptionHandler"/>
异常类
package com.etc.exception;

import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/*
* 全局异常处理器
* */


public class MyExceptionHandler implements HandlerExceptionResolver, Ordered {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        Map map = new HashMap<String,Exception>();
        //异常信息
        map.put("ex",ex);
        //1、解析出异常类型
        String viewName ="";
        if(ex instanceof MyError)
        {
            //2、如果该异常类型是自定义的操作异常,直接获取异常信息,在错误页面展示
            viewName = "myError";
        }
        else
        {
            //3、如果该异常类型不是自定义的操作异常,构建一个自定义的操作异常类型
           viewName = "commonError";
        }
        //返回错误页面
        return new ModelAndView(viewName,map);

    }

    //设置优先级
    @Override
    public int getOrder() {
        return 0;
    }
}

二、方法二

通过注解的方法
package com.etc.exception;

import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/*
* 全局异常处理器
* */

@Component
public class MyExceptionHandler implements HandlerExceptionResolver, Ordered {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        Map map = new HashMap<String,Exception>();
        //异常信息
        map.put("ex",ex);
        //1、解析出异常类型
        String viewName ="";
        if(ex instanceof MyError)
        {
            //2、如果该异常类型是自定义的操作异常,直接获取异常信息,在错误页面展示
            viewName = "myError";
        }
        else
        {
            //3、如果该异常类型不是自定义的操作异常,构建一个自定义的操作异常类型
           viewName = "commonError";
        }
        //返回错误页面

        return new ModelAndView(viewName,map);

    }

    @Override
    public int getOrder() {
        return 0;
    }
}

三、方法三

在同一个Controller里

•@ExceptionHandler注解

/*
    * 第三种处理异常的方法
    * 缺点:该方法要与发生异常的方法在同一个Controller类中
    * 解决方法:可以通过继承的方法避免*/
    @ExceptionHandler
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        Map map = new HashMap<String,Exception>();
        //异常信息
        map.put("ex",ex);
        //1、解析出异常类型
        String viewName ="";
        if(ex instanceof MyError)
        {
            //2、如果该异常类型是自定义的操作异常,直接获取异常信息,在错误页面展示
            viewName = "myError";
        }
        else
        {
            //3、如果该异常类型不是自定义的操作异常,构建一个自定义的操作异常类型
            viewName = "commonError";
        }
        //返回错误页面

        return new ModelAndView(viewName,map);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值