您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03-SpringMVC异常处理-简单异常处理器(defaultErrorView与exceptionMappings)
发布时间:2025-01-13 17:50:17编辑:雪饮阅读()
-
我们先来造成一个异常,而这个异常的浏览器访问入口假定为/show
那么基于前番我们的配置,为了简单起见,这里肯定也是不需要登录就能访问。
所以在Spring MVC配置文件中新增排除的拦截器:
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/show"/>
<bean class="sp21.interceptor.PrivilegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
然后我们造一个demoService接口
package sp21.service;
public interface DemoService {
void show1();
}
以及DemoServiceImpl实现
package sp21.service.impl;
import sp21.service.DemoService;
public class DemoServiceImpl implements DemoService {
public void show1() {
System.out.println("抛出类型转换异常......");
Object str="kasumi";
Integer num=(Integer) str;
}
}
然后在Spring配置文件中配置这个demoService的bean
<!--配置demoService-->
<bean id="demoService" class="sp21.service.impl.DemoServiceImpl"/>
那么接下来我们建立demoController如:
package sp21.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sp21.service.DemoService;
@Controller
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping("/show")
public String show(){
System.out.println("show running....");
demoService.show1();
return "index";
}
}
这里我们访问如:
http://localhost:8080/SpringProject2Module1_war/show
那么在页面中就会出现关键部分报错“java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
”也就是类型转换异常。
这个报错就是一堆乱码(当然这是异常,只不过一堆的异常错误信息,对于外行人来说他们不懂的,大都叫乱码。。。)
这样默认的异常处理很不友好,客户可能不会再次来了的。
应该伪装成如“网络错误,请检查网络”等比较友好的。
那么我们目前webapp下面有个error.jsp
<%--
Created by IntelliJ IDEA.
User: 1
Date: 2025/1/11
Time: 13:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
通用的错误提示页面
</body>
</html>
基于前番由于我们配置了InternalResourceViewResolver
对jsp的内部视图解析器,而这里正好也受影响,我们配置为pages目录下面。
所以上面这个error.jsp也建立如pages/error目录下。
然后我们Spring MVC配置文件中新增异常解析器配置如
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error/error"/>
</bean>
那么我们再次访问
http://localhost:8080/SpringProject2Module1_war/show
则会页面中输出:
通用的错误提示页面
那么同在error目录中新增error1.jsp
<%--
Created by IntelliJ IDEA.
User: 1
Date: 2025/1/11
Time: 13:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
类型转换异常
</body>
</html>
以及error2.jsp:
<%--
Created by IntelliJ IDEA.
User: 1
Date: 2025/1/11
Time: 13:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
自定义异常
</body>
</html>
然后我们建立自定义异常
package sp21.exception;
public class MyException extends Exception{
}
然后我们重新在Spring MVC配置文件中配置异常处理器如:
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--<property name="defaultErrorView" value="error/error"/>-->
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="error/error1"/>
<entry key="sp21.exception.MyException" value="error/error2"/>
</map>
</property>
</bean>
那么再次访问
http://localhost:8080/SpringProject2Module1_war/show
浏览器将显示
类型转换异常
那么接下来我们修改下DemoService接口
package sp21.service;
import sp21.exception.MyException;
public interface DemoService {
void show1();
void show5() throws MyException;
}
这里新增了show5方法,所以也在DemoServiceImpl中实现下
public void show5() throws MyException{
System.out.println("抛出自定义类型异常......");
throw new MyException();
}
那么接下来我们的控制器中新增show5方法
@RequestMapping("/show5")
public String show5() throws MyException {
System.out.println("show running....");
demoService.show5();
return "index";
}
并在Spring MVC配置文件中放行show5的访问
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/show"/>
<mvc:exclude-mapping path="/show5"/>
<bean class="sp21.interceptor.PrivilegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
那么最后我们访问如:
http://localhost:8080/SpringProject2Module1_war/show5
在浏览器中输出
自定义异常
关键字词:SpringMVC,异常,exception
相关文章
- 01-SpringMVC异常处理-异常处理的思路(异常何时抛出?何
- 09-SpringMVC拦截器-用户登录权限控制代码实现3
- 08-SpringMVC拦截器-用户登录权限控制代码实现2(exclu
- 07-SpringMVC拦截器-用户登录权限控制代码实现1
- 04-SpringMVC拦截器-快速入门详解(多拦截器与先进后出
- 03-SpringMVC拦截器-快速入门(解决System.out.println
- 27-SpringMVC的请求-文件上传-多文件上传的代码实现
- 26-SpringMVC的请求-文件上传-单文件上传的代码实现2
- 25-SpringMVC的请求-文件上传-单文件上传的代码实现1(
- 24-SpringMVC的请求-文件上传-客户端表单实现