异常处理器
什么是异常处理器
Spring MVC在处理器方法
执行过程中出现了异常,可以采用异常处理器
进行应对。一句话概括异常处理器作用:处理器方法执行过程中出现了异常,跳转到对应的视图,在视图上展示友好信息。
SpringMVC为异常处理提供了一个接口:HandlerExceptionResolver
,核心方法是:resolveException
。
package org.springframework.web.servlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
public interface HandlerExceptionResolver {
@Nullable
ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);
}
该方法用来编写具体的异常处理方案。返回值ModelAndView
,表示异常处理完之后跳转到哪个视图,HandlerExceptionResolver
接口有两个常用的默认实现:
- DefaultHandlerExceptionResolver
- SimpleMappingExceptionResolver
默认异常处理器(DefaultHandlerExceptionResolver)
DefaultHandlerExceptionResolver
是默认的异常处理器。核心方法是doResolveException
。
自定义异常处理器(SimpleMappingExceptionResolver)
自定义异常处理器需要使用:SimpleMappingExceptionResolver
在ExceptionController
设置/index
的视图控制器。由于我们设置了method = RequestMethod.POST
,所以只有请求方式为POST
才能跳转到index。html
页面,但是uri请求为GET
。
package com.powernode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ExceptionController {
@RequestMapping(value = "index",method = RequestMethod.POST)
public String index(){
return "index";
}
}
所以打开页面时结果是这样的:
但是我想让这个异常页面设置成我想要的该怎么办?
配置文件方式
在SpringMVC
架构的配置文件中添加这一部分:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--用来指定出现异常后,跳转的视图-->
<prop key="java.lang.Exception">tip</prop>
</props>
</property>
<!--将异常信息存储到request域,value属性用来指定存储时的key。-->
<!--底层会执行这样的代码:request.setAttribute("e",异常对象)-->
<property name="exceptionAttribute" value="e"/>
</bean>
同时tip的页面如下:
<!DOCTYPE html >
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>异常</title>
</head>
<body>
<h1>出现异常啦,请联系管理员!!</h1>
<hr>
<div th:text="${e}"></div>
</body>
</html>
使用xml配置异常处理器时,不能使用<mvc:annotation-driven />
结果:
注解方式
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class ExceptionController {
// 异常处理器
@ExceptionHandler
public String totip(Exception e, Model model){
// 将异常信息添加到model中
model.addAttribute("e",e);
// 返回tip页面
return "tip";
}
}
这种方式同样不能使用<mvc:annotation-driven />
结果:
分类:
Java / SpringMVC
, Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?