org.springframework.web.bind.annotation.ExceptionHandle注释的作用对象为方法,并且运行时有效,value()可以指定异常类。
@ExceptionHandle注释源代码如下:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ExceptionHandler { Class<? extends Throwable>[] value() default(); }
@ExceptionHandler注释方法可以支持的参数除了HttpServletRequest,HttpServletResponse等对象之外,还支持一个异常参数,包括一般的异常或自定义异常。如果注释没有指定异常类,会进行默认映射。
示例:@ExceptionHandler处理异常
1.控制器
package org.fkit.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class TestController { @GetMapping("/testException") public String testException() { return "testException"; } @GetMapping("/testExceptionHandler") public String testExceptionHandler() throws Exception { //模拟异常 int i = 5/0; return "success"; } /** * 在抛出异常的时候,Controller会使用@ExceptionHandler注释的方法去处理异常 */ @ExceptionHandler(value=Exception.class) public ModelAndView testErrorHandler(Exception e) { ModelAndView mav = new ModelAndView(); mav.addObject("ex", e); mav.setViewName("error"); return mav; } }
2.视图
<!DOCTYPE HTML> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" > <head> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <meta content="text/html;charset=UTF-8"/> <title>Error Page</title> </head> <body> <h2>Error Page</h2> <h4>${requestScope.ex.message}</h4> </body> </html>