springmvc异常统一处理(SpringMVC - 异常处理器@ExceptionHandler与@ResponseStatus注解)

本文目录
- SpringMVC - 异常处理器@ExceptionHandler与@ResponseStatus注解
- Spring Boot中Controller的统一异常处理
- 十一、SpringMVC之自定义异常处理器
- 怎么对springmvc 返回的数据进行统一拦截
- 关于spring的一个异常,怎么解决
- SpringMVC统一处理BindingResult
- springmvc调用webservice线上异常
SpringMVC - 异常处理器@ExceptionHandler与@ResponseStatus注解
SpringMVC通过使用 HandlerExceptionResolver处理程序异常。
在没有加《mvc:annotation-driver /》之前,SpringMVC的DispatcherServlet默认装配AnnotationMethodHandlerExceptionResolver异常处理器。使用了《mvc:annotation-driver /》 SpringMVC将装配HandlerException异常处理器。
注意,@ExceptionHandler注解的方法里不能用Map作为参数,如果需要需要将异常传导到页面上,需要使用ModelAndView作为返回值。
此时,当被@ExceptionHandler注解标识的方法所在的被@Controller注解标识类出现异常时,将会调用异常处理器testExceptionHandler1方法,testExceptionHandler2将不会被调用。
2.@ResponseStatus作用于方法上
如果@ResponseStatus作用于方法上,无论方法执行成功与否都会返回到自定义的异常页面。
Spring Boot中Controller的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射: /error ,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。
虽然,Spring Boot中实现了默认的 error 映射,但是在实际应用中,上面你的错误页面对用户来说 并不够友好 ,我们通常需要去实现我们自己的异常提示。
下面我们以之前的Web应用例子为基础,进行统一异常处理的改造。
通过使用 @ControllerAdvice 定义统一的异常处理类,而不是在每个Controller中逐个定义。 @ExceptionHandler 用来定义函数针对的异常类型,最后将Exception对象和请求URL映射到error.html中。
在templates目录下创建error.html,将请求的URL和Exception对象的message输出。
***隐藏网址***
通过实现上述内容之后,我们只需要在Controller中抛出Exception,当然我们可能会有多种不同的Exception。然后在 @ControllerAdvice 类中,根据抛出的具体Exception类型匹配 @ExceptionHandler 中配置的异常类型来匹配错误映射和处理。
在上述例子中,通过 @ControllerAdvice 统一定义不同Exception映射到不同错误处理页面。而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时候我们也能轻松支持。
本质上,只需在 @ExceptionHandler 之后加入 @ResponseBody ,就能让处理函数return的内容转换为JSON格式。
下面以一个具体示例来实现返回JSON格式的异常处理。
code:消息类型,message:消息内容,url:请求的url,data:请求返回的数据
至此,已完成在Spring Boot中创建统一的异常处理,实际实现还是依靠Spring MVC的注解,更多更深入的使用可参考Spring MVC的文档。
十一、SpringMVC之自定义异常处理器
在实际开发中,经常会出现一些各种不可避免的异常,404、500等,出现异常后,不经过处理,会将错误的堆栈信息暴露到前端页面,对用户而言非常不友好,为了解决该问题,我们可以引入SpringMVC的异常处理机制:
当controller抛出异常后,应该去调用异常处理器组件,再去调腔茄用异常处理器处理异常,从而跳转一些比较友好的页面。
解决步骤:
1、编写自定义异常类(做提示信息的)
2、编写异常处理器
3、配置异常处理器(跳转到提示页面)
编写自定义异常处雀扮理类
SpringMVC配置文件中进行配置异常处理器
1、需要自定义一个异常类SysException
2、编写异常处理器(实现HandlerExceptionResolver)
3、配置异常处理器(在spring的配置文件中配置异常处理器)
4、应用
在需要抛出自定义异常的地方伍岁察,throw自己写的异常类,异常处理器匹配到相应的异常后,做对应处理。
5、数据展示
怎么对springmvc 返回的数据进行统一拦截
用token,使用token的逻辑是,给所有的url加一个拦截器,在拦截器里面用java的UUID生成一个随机的UUID并把这个UUID放到session里面,然后在浏览器做数据提交的时候将此UUID提交到服务器。服务器在接收到此UUID后,检查一下该UUID是否已经被提交
关于spring的一个异常,怎么解决
spring mvc 异常统一处理方式
springMVC提供的异常处理主要有两种方式,顷正一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的Controller——ExceptionHandler。
1、实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现——DefaultExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截处理。
***隐藏网址***
***隐藏网址***
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
public class ExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// TODO Auto-generated method stub
return new ModelAndView("exception");
}
}
上述的resolveException的第4个参数表示对哪种类型的异常进行处理,如果想同时对多种异常进行处理,可以把它换成一个异常数组。
定义了这样一个异常处理器之后就要在applicationContext中定义这样一个bean对象桐裤,如:
《bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/》
2、使用@ExceptionHandler进行处理
使用@ExceptionHandler进行处理有一个不好的地方雀轮悔是进行异常处理的方法必须与出错的方法在同一个Controller里面
SpringMVC统一处理BindingResult
想要统一处理,就不要在形参中定义BindingResult类,具体参考这里:
***隐藏网址***
springmvc调用webservice线上异常
根据查询相关公开信息显示,springmvc调用webservice线上异常处理步骤如下:
1、引发springmvc调用webservice线上异常的原因有多种,首先我们要确认是哪种原因引起的异常。
2、比如Java.lang.NoClassDefFoundError:javax/xml/soap/SOAPException,原因是没有导入axis2-saaj.jar包。
3、比如java.lang.NoClassDefFoundError:org/apache/commons/discovery/tools/DiscoverSingleton,原因是没有导入commons-discovery.jar包。
4、再比如org.apache.commons.logging.LogFactory,原因是没有导入commons-logging.jar包。
5、我们需要根据具体的异常报错提示,找到对应的引发原因,对症下药去进行处理。

本文相关文章:
aspectj和springaop区别(spring已经实现了aop,为什么还要用“aspectj”)
2026年7月23日 18:40
llikespring的中文意思(速求I like spring英语作文 50字差不多)
2026年7月12日 04:30
更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30





