SpringBoot学习12:springboot异常处理方式2(使用@ExceptionHandle注解)

1、编写controller

package com.bjsxt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created by Administrator on 2019/2/13.
 */
@Controller
public class IndexController {

    @RequestMapping("toIndex")
    public String toIndex(){
        String str=null;
        //会发生空指针异常
        str.length();
        return "index";
    }

    @RequestMapping("toIndex2")
    public String toIndex2(){
        //会发生算术异常
        int num=10/0;
        return "index";
    }

    @RequestMapping("toIndex3")
    public String toIndex3(){
        //会发生数组下标越界异常,该异常没有专门处理,会跳到自定义的错误页面
        String[] arr={"aa","bb","cc"};
        System.out.print(arr[3]);
        return "index";
    }

    /**
     * 处理ArithmeticException异常,该@ExceptionHandler注释的value属性可以是一个数组,
     * 然后再根据注入的exception判断对不同异常分别进行不同的处理,也可以写多个controller,
     * 对多个不同异常进行处理,这里采用第二种
     * @param e 会将产生异常对象注入到方法中
     * @return 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定
     */
    @ExceptionHandler(value = {java.lang.ArithmeticException.class})
    public ModelAndView arithmeticExceptionHandler(Exception e){
        ModelAndView mv=new ModelAndView("error_arithmetic");
        mv.addObject("msg",e.toString());
        return mv;
    }


    /**
     * 处理NullPointerException异常
     * @param e 会将产生异常对象注入到方法中
     * @return 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定
     */
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView nullPointerExceptionHandler(Exception e){
        ModelAndView mv=new ModelAndView("error_nullPointer");
        mv.addObject("msg",e.toString());
        return mv;
    }

}

目录结构,该方法存在的弊端就是在每一个controller里面都要添加这些异常处理代码,造成代码冗余拉杂

 

posted @ 2019-02-13 15:11  段然涛  阅读(2288)  评论(0编辑  收藏  举报