SpringMVCコアテクノロジー-例外処理

springmvcフレームワークは、統一されたグローバル例外処理を採用しています。これは、コントローラー内のすべての例外処理を1つの場所に集中させ、aopの概念を採用しています。個別のビジネスロジックと例外処理コード。

例外処理の手順:

        1.カスタム例外クラスを作成し、そのサブクラス例外を定義します

        2.グローバル例外処理クラスとして共通クラスを作成します

                1)クラスの上に@ControllerAdviceを追加します

                2)クラスでメソッドを定義し、メソッドの上に@ExpectationHandlerを追加します

             スローされた例外の処理:

                 @ControllerAdvice:コントローラーの機能強化は、コントローラークラスに関数を追加することです(例外を処理する関数)

                 場所:クラスの上

                 機能:フレームワークはこのアノテーションのパッケージ名を知っている必要があり、コンポーネントスキャナーはspringMVC構成ファイルで宣言する必要があります

                             @ControllerAdviceが配置されているパッケージ名の場所を指定します

                例外を処理するクラスメソッドを定義する

                          例外を処理する方法は、コントローラーメソッドの定義と同じです。複数のパラメーターを持つことができ、ModelAndViewStringを持つことができます。 

                正式なパラメーター:例外。コントローラーでスローされた例外オブジェクトを表します。

                           例外の情報は、仮パラメータを介して取得できます

               メソッドに注釈を付ける@ExceptionHandle(例外のクラス):例外のタイプを示します。このような例外が発生すると、このメソッドによって処理されます。

        3.コントローラーで例外をスローします

        4.例外を処理するビューページを作成します

        5.springmvc構成ファイルを作成します

               1)コンポーネントスキャナー、@ controllerアノテーションをスキャン

               2)コンポーネントスキャナー、@ ControllerAdviceのパッケージ名をスキャンします

               3)アノテーション駆動型を宣言する

コードデモ:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="textml; charset=UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="user/some.do" method="post">
        姓名:<input type="text" name="name"><br/>
        年龄:<input type="text" name="age"><br/>
        <input type="submit" value="提交请求">
    </form>
</body>
</html>

コントローラークラス

@RequestMapping(value = "/user")
@Controller
public class myController {
    @RequestMapping(value = "/some.do")
    public ModelAndView dosome(String name,String age) throws myException {
        ModelAndView mv = new ModelAndView();
        //根据请求的参数抛出异常
        if("".equals(name)){
            //抛出的异常交给框架处理
            throw new nameException("姓名不为空");
        }
        if (!isNum(age)) {
            throw  new ageException("年龄输入非数字");
        }
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }
    public boolean isNum(String str){
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}

例外クラス:

public class myException extends Exception {
    public myException() {
        super();
    }
    public myException(String message) {
        super(message);
    }
}
/**
 * 年龄出现异常,抛出异常
 */
public class ageException extends myException {
    public ageException() {
        super();
    }
    public ageException(String message) {
        super(message);
    }
}
/**
 * name出现异常,抛出异常
 */
public class nameException extends myException {
    public nameException() {
        super();
    }
    public nameException(String message) {
        super(message);
    }
}

スローされた例外の処理

@ControllerAdvice
public class ExceptionHandle {
    @ExceptionHandler(value = nameException.class)
    public ModelAndView doNameException(Exception exception){
        ModelAndView mv  = new ModelAndView();
        mv.addObject("tips","姓名不为空!!");
        mv.addObject("ex",exception);
        mv.setViewName("nameError");
        return mv;
    }
    @ExceptionHandler(value = ageException.class)
    public ModelAndView doAgeException(Exception exception){
        ModelAndView mv  = new ModelAndView();
        mv.addObject("tips","年龄输入错误!!");
        mv.addObject("ex",exception);
        mv.setViewName("ageError");
        return mv;
    }
    //其他的错误信息处理
    @ExceptionHandler
    public ModelAndView doOtherException(Exception exception){
        ModelAndView mv  = new ModelAndView();
        mv.addObject("tips","其他异常错误!!");
        mv.addObject("ex",exception);
        mv.setViewName("otherError");
        return mv;
    }

}

jspページの異常な表示:その他の類似点とわずかな違い

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ageError.jsp的错误信息<br/>
    ${tips}<br/>
    ${ex.message}<br/>
</body>
</html>

SpringMVC構成ファイルを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <context:component-scan base-package="cn.com.Ycy.Contrller"/>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀名:视图文件的路径-->
            <property name="prefix" value="/WEB-INF/"/>
            <!-- 后缀名:视图文件的扩展名 -->
            <property name="suffix" value=".jsp"/>
        </bean>
        <!-- 处理异常的两步  -->
        <context:component-scan base-package="cn.com.Ycy.handle"/>
        <mvc:annotation-driven/>
</beans>

 

おすすめ

転載: blog.csdn.net/weixin_43725517/article/details/108253018