1. 程式人生 > >SpringMVC(十三)異常註解

SpringMVC(十三)異常註解

col el表達式 不能 就是 instance int 我們 type except

使用異常註解更方便

異常處理類

package demo15AnnotationException;

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;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** * Created by mycom on 2018/3/30. */ @Controller public class ExceptionController { /** * 這個標簽就代表有異常的話就走這個方法 * @ExceptionHandler() * 這個括號中可以指定你想要的特定的異常類型,不寫的話就是頂級異常 * @param ex * @return */ @ExceptionHandler public ModelAndView handlerException(Exception ex) { ModelAndView mv
=new ModelAndView(); mv.addObject("ex",ex);//保存的數據,在頁面上用EL表達式展示錯誤信息 //默認情況,下面兩個條件都不滿足走這個, mv.setViewName("error"); //判斷異常類型 if(ex instanceof NameException){ mv.setViewName("nameException"); } if(ex instanceof AgeException){ mv.setViewName(
"ageException"); } return mv; } @RequestMapping("/first") public String doFirst(String name,int age) throws Exception { //根據異常的不同返回不同的頁面 if(!name.equals("admin")){ throw new NameException("用戶名異常"); } if(age>60){ throw new AgeException("年齡不符合"); } return "success"; } }

兩種異常類型:用戶名異常和年齡異常

package demo15AnnotationException;

/**
 * Created by mycom on 2018/3/30.
 */
public class NameException extends Exception {
    public NameException() {
        super();
    }

    public NameException(String message) {
        super(message);
    }
}
package demo15AnnotationException;

/**
 * Created by mycom on 2018/3/30.
 */
public class AgeException extends Exception {
    public AgeException() {
        super();
    }

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

配置文件中

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--包掃描器-->
    <context:component-scan base-package="demo15AnnotationException"></context:component-scan>

    <!--視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/error/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--註解驅動-->
    <mvc:annotation-driven></mvc:annotation-driven>




</beans>

頁面還是使用的上一篇博客的頁面,可以自己定義頁面

這種方式只能在本類中使用,在其他類中不能使用,所以我們可以吧處理異常的那個方法提到一個類中,其它類要使用的話就繼承這個類,但是這樣有一個弊端,在Java中只支持單繼承,所以這個類就不能繼承其他類了

SpringMVC(十三)異常註解