目录
SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver
HandlerExceptionResolver的源码
- //
- // Source code recreated from a .class file by IntelliJ IDEA
- // (powered by FernFlower decompiler)
- //
-
- package org.springframework.web.servlet;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.lang.Nullable;
-
- public interface HandlerExceptionResolver {
- @Nullable
- ModelAndView resolveException
- (HttpServletRequest var1,
- HttpServletResponse var2,
- @Nullable Object var3,
- Exception var4);
- }
HandlerExceptionResolver接口的实现类有:
SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver,使用方式
- @Controller
- public class TestController {
- @RequestMapping("/test/hello")
- public String testHello(){
- System.out.println(1/0);
- return "success";
- }
- }
- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
- <property name="exceptionMappings">
- <props>
-
- <prop key="java.lang.ArithmeticException">errorprop>
- props>
- property>
-
- <property name="exceptionAttribute" value="ex">property>
- bean>
- html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>错误title>
- head>
- <body>
- <h1>error.htmlh1>
- <p th:text="${ex}">p>
- body>
- html>
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Component
- public @interface ControllerAdvice {
- @AliasFor("basePackages")
- String[] value() default {};
-
- @AliasFor("value")
- String[] basePackages() default {};
-
- Class>[] basePackageClasses() default {};
-
- Class>[] assignableTypes() default {};
-
- Class extends Annotation>[] annotations() default {};
- }
- @Target({ElementType.METHOD})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface ExceptionHandler {
- Class extends Throwable>[] value() default {};
- }
- package com.atguigu.controller;
-
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
-
- //将当前类标识为异常处理的组件
- @ControllerAdvice
- public class ExceptionController {
- //设置要处理的异常信息
- @ExceptionHandler(ArithmeticException.class)
- public String handleException(Throwable ex,Model model){
- //将异常信息共享到请求域,ex表示控制器方法出现的异常
- model.addAttribute("ex",ex);
- return "error";
- }
- }
运行效果:
