Skip to content

10. 异常处理

10.1. 定义自定义异常类

非必须

java
/**
 * 项目    : spring-mvc-java1
 * 创建时间 :2020/3/31  9:57 31
 * author  :jshand-root
 * site    :  http://314649444.iteye.com
 * 描述     : 自定义异常类
 */
public class BusinessException extends  Exception {

    public BusinessException(String message) {
        super(message);
    }
}

10.2. 定义异常处理器

当产生异常时能够进行处理,比如说跳转到一个友好错误界面

  • 异常处理器 MyHandlerExceptionResolver
  • 通用的异常处理页面 500.jsp
  • 可能产生异常的Controller
java
package com.neuedu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 项目:      spring-framework
 * 类名:       UserController
 * 创建时间:  2024/3/20 13:50
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@Controller
@RequestMapping("/user")
public class UserController {


    /**
     * http://localhost:8080/web/user/calc?numa=10&numb=2
     * @param numa
     * @param numb
     * @return
     */
    @RequestMapping("/calc")
    @ResponseBody
    public String calc(int numa, int numb){
        return String.valueOf(numa/numb);
    }


}
java
package com.neuedu.mvc.framework;

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;

/**
 * 项目:      spring-framework
 * 类名:       MyHandlerExceptionResolvers
 * 创建时间:  2024/3/20 13:59
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("ex.getClass() = " + ex.getClass());

//        if(exinstanceof ArithmeticException){
//
//        }


        //出现异常的时候 跳转到 一个漂亮的 错误页面
        ModelAndView modelAndView = new ModelAndView("/500");
        return modelAndView;
    }
}
html
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/3/20
  Time: 13:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

    <style>
        .container{

            width: 100%;
            height: 300px;
            border: solid 1px grey;
            box-shadow: 0 0 5px orange;
            background-color: skyblue;
            margin: 5px;
            border-radius: 5px ;

        }


    </style>
</head>
<body>

        <div class="container">
            假装我是一个漂亮页面


        </div>



</body>
</html>
java
package com.neuedu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 项目:      spring-framework
 * 类名:       UserController
 * 创建时间:  2024/3/20 13:50
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@Controller
@RequestMapping("/user")
public class UserController {


    /**
     * http://localhost:8080/web/user/calc?numa=10&numb=2
     * @param numa
     * @param numb
     * @return
     */
    @RequestMapping("/calc")
    @ResponseBody
    public String calc(int numa, int numb){
        return String.valueOf(numa/numb);
    }


}

10.3. 配置异常处理器

将定义好的异常处理器配置到iOC容器中。

  • 使用包扫描 @Component
  • <bean class="com.neuedu.mvc.framework.MyHandlerExceptionResolver"/>

Released under the MIT License.