• SpringMVC异常处理器


    目录

    一、基于xml配置的异常处理

    二、基于注解的异常处理

    1.ControllerAdvice 源码

    2.ExceptionHandler 源码

    3.控制层方法 


    一、基于xml配置的异常处理

    SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver

    HandlerExceptionResolver的源码

    1. //
    2. // Source code recreated from a .class file by IntelliJ IDEA
    3. // (powered by FernFlower decompiler)
    4. //
    5. package org.springframework.web.servlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import org.springframework.lang.Nullable;
    9. public interface HandlerExceptionResolver {
    10. @Nullable
    11. ModelAndView resolveException
    12. (HttpServletRequest var1,
    13. HttpServletResponse var2,
    14. @Nullable Object var3,
    15. Exception var4);
    16. }

    HandlerExceptionResolver接口的实现类有:

    • DefaultHandlerExceptionResolver
    • SimpleMappingExceptionResolver

    SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver,使用方式

    1. @Controller
    2. public class TestController {
    3. @RequestMapping("/test/hello")
    4. public String testHello(){
    5. System.out.println(1/0);
    6. return "success";
    7. }
    8. }
    1. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    2. <property name="exceptionMappings">
    3. <props>
    4. <prop key="java.lang.ArithmeticException">errorprop>
    5. props>
    6. property>
    7. <property name="exceptionAttribute" value="ex">property>
    8. bean>
    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>错误title>
    6. head>
    7. <body>
    8. <h1>error.htmlh1>
    9. <p th:text="${ex}">p>
    10. body>
    11. html>

    二、基于注解的异常处理

    1.ControllerAdvice 源码

    1. @Target({ElementType.TYPE})
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Documented
    4. @Component
    5. public @interface ControllerAdvice {
    6. @AliasFor("basePackages")
    7. String[] value() default {};
    8. @AliasFor("value")
    9. String[] basePackages() default {};
    10. Class[] basePackageClasses() default {};
    11. Class[] assignableTypes() default {};
    12. Classextends Annotation>[] annotations() default {};
    13. }

    2.ExceptionHandler 源码

    1. @Target({ElementType.METHOD})
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Documented
    4. public @interface ExceptionHandler {
    5. Classextends Throwable>[] value() default {};
    6. }

    3.控制层方法 

    1. package com.atguigu.controller;
    2. import org.springframework.ui.Model;
    3. import org.springframework.web.bind.annotation.ControllerAdvice;
    4. import org.springframework.web.bind.annotation.ExceptionHandler;
    5. //将当前类标识为异常处理的组件
    6. @ControllerAdvice
    7. public class ExceptionController {
    8. //设置要处理的异常信息
    9. @ExceptionHandler(ArithmeticException.class)
    10. public String handleException(Throwable ex,Model model){
    11. //将异常信息共享到请求域,ex表示控制器方法出现的异常
    12. model.addAttribute("ex",ex);
    13. return "error";
    14. }
    15. }

    运行效果: 

     

  • 相关阅读:
    Unity中Shader纹理的环绕方式
    Linux安装Mariadb数据库
    计算物理专题----随机游走实战
    树状图PPT怎么做?用这个树状图制作软件轻松拿捏!
    css水平垂直居中
    【MyAndroid】viewpage+cardView卡片海报效果展示--100个经典UI设计模板(99/100)
    DevEco studio配置自己的虚拟环境
    UNITY与安卓⭐二、AndroidStudio中关于通讯的使用教学
    FutureTask源码深度剖析
    MySQL5.7高级函数:JSON_ARRAYAGG和JSON_OBJECT的使用
  • 原文地址:https://blog.csdn.net/m0_52982868/article/details/126403749