Spring MVC错误处理流程

使用Spring MVC可以通过三种方式处理异常流,其目的是拦截任何应用程序异常,并向用户提供友好而信息丰富的视图。

1.在web.xml文件中使用error-page标记:

这是servlet规范驱动的方法,其中基于HTTP响应代码或异常类型来拦截从应用程序冒出的异常,并使用location子标记通过以下方式指定该异常的处理程序:

<error-page><error-code>500</error-code><location>/500</location>
</error-page>
<error-page><exception-type>java.lang.Exception</exception-type><location>/uncaughtException</location>
</error-page>

如果它是基于Spring MVC的应用程序,并且意图是通过Spring MVC视图呈现消息,那么理想情况下,一个位置应该是可以显示内容的Spring控制器,并且可以使用上面的2个位置来完成此操作Spring MVC配置:

<mvc:view-controller path="/500" view-name="500view"/>
<mvc:view-controller path="/uncaughtException" view-name="uncaughtexception"/>

2.注册一个

HandlerExceptionResolver负责将异常映射到视图,最简单的方法是注册一个SimpleMappingExceptionResolver,它可以将异常类型映射到视图名称。 以下是使用Spring xml bean定义(基于Roo示例)注册SimpleMappingExceptionResolver的方法:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" p:defaultErrorView="uncaughtException"><property name="exceptionMappings"><props><prop key=".DataAccessException">dataAccessFailure</prop><prop key=".NoSuchRequestHandlingMethodException">resourceNotFound</prop><prop key=".TypeMismatchException">resourceNotFound</prop><prop key=".MissingServletRequestParameterException">resourceNotFound</prop></props></property>
</bean>

或使用基于Java配置的bean定义:

@Bean
public HandlerExceptionResolver handlerExceptionResolver() {SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();exceptionResolver.setDefaultErrorView("uncaughtException");Properties mappings = new Properties();mappings.put(".DataAccessException", "dataAccessFailure");mappings.put(".NoSuchRequestHandlingMethodException", "resourceNotFound");mappings.put(".TypeMismatchException", "resourceNotFound");mappings.put(".MissingServletRequestParameterException", "resourceNotFound");exceptionResolver.setExceptionMappings(mappings );return exceptionResolver;
}

3.使用@ExceptionHandler

这是我的首选方法,使用@ExceptionHandler批注有两种变体。

在第一个变体中,可以将@ExceptionHandler应用于控制器类的级别,在这种情况下,同一控制器@RequestMapped方法引发的异常由@ExceptionHandler注释方法处理。

@Controller
public class AController {@ExceptionHandler(IOException.class)public String handleIOException(IOException ex) {return "errorView";}
}

在@ExceptionHandler的第二个变体中,可以通过对@ControllerAdvice带注释的类的方法进行注释,将注释应用于所有控制器类:

@ControllerAdvice
public class AControllerAdvice {@ExceptionHandler(IOException.class)public String handleIOException(IOException ex) {return "errorView";}
}

这些本质上是在Spring MVC应用程序中处理应用程序异常的方法。

参考: Spring MVC来自all和各式博客的JCG合作伙伴 Biju Kunjummen的错误处理流程 。

翻译自: https://www.javacodegeeks.com/2013/06/spring-mvc-error-handling-flow.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Busybox下tftp命令使用详解

参数说明&#xff1a;-l 是local的缩写&#xff0c;后跟存在于Client的源文件名&#xff0c;或下载Client后 重命名的文件名。 -r 是remote的缩写&#xff0c;后跟Server即PC机tftp服务器根目录中的源文 件名&#xff0c;或上传Se…

php 获取sql字段名,php – 使用DISTINCT和UNION在SQL查询中获取字段名称

我有以下查询&#xff1a;SELECT DISTINCT(uniq)FROM(SELECT sex AS uniq FROM type4UNIONSELECT fason AS uniq FROM type4UNIONSELECT color AS uniq FROM type4UNIONSELECT size AS uniq FROM type4) AS Temp它运作得很好,它返回&#xff1a;[uniq] > some unique value是…

OC学习笔记——基础控件篇

因为之前做iOS开发用的都是swift语言&#xff0c;没有用过oc&#xff0c;本篇博客整理一下UIKIt中组件基于oc的使用&#xff0c;顺便把每个组件在秋招中遇到的问题整理一下。 UIView的使用 UIView继承链&#xff1a;NSObject->UIResponder->UIView UIView生命周期&…

大数据开源安全

在安全性方面从未有&#xff08;恕我直言&#xff09;已经足够了开源解决方案和布鲁斯已经撰写了有关这几个 时间在过去 &#xff0c;而且也没有必要再次改写参数。 现在&#xff0c;随着市场上“ NoSQL”和“大数据”开源趋势的发展&#xff0c;安全终于有了交集……如果我愿…

如何在一个页面添加多个不同的kindeditor编辑器

kindeditor官方下载地址&#xff1a;http://kindeditor.net/down.php &#xff08;入门必看&#xff09;kindeditor官方文档&#xff1a;http://kindeditor.net/doc.php &#xff08;入门必看&#xff09;Kindeditor编辑器初始化参数文档&#xff1a;http://kindeditor.net/doc…

JSONArray.fromObject不执行且不报错问题的解决

今天在写javaweb工程的时候需要向前台传json格式的数据&#xff0c;用到了json-lib-2.4-jdk15.jar等一系列包&#xff0c;然而却出现如下状况&#xff1a; CityBean是一个javaBean&#xff0c;我们看到&#xff0c;控制台只打印出了list的内容&#xff0c;而下面的两个却没能打…

爬虫-scrapy

阅读目录 一 介绍二 安装三 命令行工具四 项目结构以及爬虫应用简介 五 Spiders六 Selectors七 Items八 Item Pipeline九 Dowloader Middeware十 Spider Middleware十一 settings.py十二 爬取亚马逊商品信息一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取…

swagge php token,swagger在thinkphp6的使用方式

/*** OA\Get(path"/api/article",* tags{"文章管理"},* summary"文章列表",* OA\Parameter(name"token", in"header", description"token", OA\Schema(type"string", default"123456")),* OA…

Java垃圾回收(4)

G1&#xff1a;垃圾优先 G1收集器是热点JVM中要实现的最新收集器。 自Java 7 Update 4以来&#xff0c;它一直是受支持的收集器。OracleGC团队也公开表示&#xff0c;他们对低暂停GC的希望是完全实现的G1。 这篇文章来自我之前的垃圾收集博客文章&#xff1a; 热点GC概述 。 …

Html5 冒泡排序演示

本文通过一个简单的小例子&#xff0c;简述冒泡算法在B/S中的简单使用&#xff0c;仅供学习分享使用&#xff0c;如有不足之处&#xff0c;还请指正。 概述 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是一种计算机科学领域的较简单的排序算法。 它重复地走访…

Codeforces 765F. Souvenirs

Description 给出长度为 \(n\) 的序列,有 \(Q\) 组询问,问 \(|a_i-a_j|\),\(l<i,j<r\)的最小值是多少?题面 Solution 无删莫队. 把询问按照左端点分块,同一块内按右端点递增排序,类似于莫队 问题在于回溯: 直接删除的话无法更新最小值,但是可以一边插入一边删除 这样我们…

学习六 - Python 函数

Python 学习 - 函数 1.创建和调用函数 创建函数 def function_name(): #无参数函数xxxdef function_name(par1, par2, ...): #带参数函数xxx记住三个关键的东西&#xff1a;def, (), : 调用 function_name() #无参数函数调用function_name(arg1, arg2, ...) #带参数函数…

一种编写测试的好方法

测试。 最近我一直在考虑进行测试。 作为我对各种项目所做的代码审查的一部分&#xff0c;我已经看到了数千行未经测试的代码。 这不仅是测试覆盖率统计数据指出这一点的情况&#xff0c;还更多是该项目中根本没有任何测试的情况 。 我一直听到这种悲惨状况的两个原因&#xff…

rem、px、em之间的区别以及网页响应式设计写法

个人收藏用&#xff0c;转载自&#xff1a;http://www.w3cplus.com/css3/define-font-size-with-css3-rem 在Web中使用什么单位来定义页面的字体大小&#xff0c;至今天为止都还在激烈的争论着&#xff0c;有人说PX做为单位好&#xff0c;有人说EM优点多&#xff0c;还有人在说…

游戏服务器架构图

1&#xff1a;ARPG类型游戏 2:MMORPG 3:MOBA 4:卡牌类 5&#xff1a;棋盘类 转载于:https://www.cnblogs.com/like-minded/p/8297718.html

php 解析http,用PHP手动解析原始HTTP数据

好的&#xff0c;所以Dave和Everts的建议我决定手动解析原始请求数据。搜索约一天后&#xff0c;我没有找到任何其他方式来做到这一点。我从这个thread获得了一些帮助。我没有任何运气篡改原始数据&#xff0c;就像在引用的线程中一样&#xff0c;因为这将破坏正在上传的文件。…

长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素...

思路&#xff1a;如果限制空间复杂度为O&#xff08;1&#xff09;&#xff0c;我们就无法采用哈希表的方法去求解。题目中数组中所以数字都在范围[0&#xff0c; N-1]&#xff0c;因此哈希表的大小为N即可。因此我们实际要做的就是对N个范围为0到N-1的数进行哈希&#xff0c;而…

测试Spring的“会话”范围

在基于Spring的Web应用程序中&#xff0c;bean的作用域可以是用户“会话”。 从本质上讲&#xff0c;这意味着对会话范围的Bean的状态更改仅在用户会话范围内可见。 此项的目的是简单地突出显示Spring Test MVC提供的一种方法&#xff0c;以测试将会话范围的bean作为依赖项的组…

Sass学习之路(3)——Sass编译

Sass的编译也是在我们使用Sass的时候必须要经过的一个步骤&#xff0c;因为".sass"和".scss"文件并不能直接使用<link>标签引用&#xff0c;最终其实还是要将他们转换成CSS文件来在项目中使用。 所以要让web页面真正使用到Sass缩写的东西&#xff0…

爬虫练习一(爬取笑话集)

爬取笑话集网页 目标网址为&#xff1a;http://www.jokeji.cn/list.html 感觉这个网站挺简单&#xff0c;不用登陆&#xff0c;没有复杂的功能&#xff0c;好爬~ 可以现在浏览器中访问这个链接看一下效果&#xff0c;你会发现这个页面是个目录&#xff0c;有很多笑话页面的链接…