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>