SpringMVC(十三)異常註解
阿新 • • 發佈:2018-03-31
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(十三)異常註解