Spring的异常处理@ExceptionHandler注解解析
Spring的异常处理
为什么需要对异常进行处理?
假如SpringMvc我们不对异常进行任何处理, 界面上显示的是这样的,假设进行除计算,除数是0会报错.:
方法一 @ExceptionHandler
当一个Controller中有方法加了@ExceptionHandler之后,这个Controller其他方法中没有捕获的异常就会以参数的形式传入加了@ExceptionHandler注解的那个方法中。
@Controller @RequestMapping("/testController") public class TestController { @RequestMapping("/demo1") @ResponseBody public Object demo1(){ //不需要try {} catch {} int i = 1 / 0; return new Date(); } //TestController 内的任何异常都会被兜住 @ExceptionHandler({RuntimeException.class}) public ModelAndView fix(Exception ex){ System.out.println("do This"); return new ModelAndView("error",new ModelMap("ex",ex.getMessage())); } }
注意事项:
- 一个Controller下多个@ExceptionHandler上的异常类型不能出现一样的,否则运行时抛异常.
Ambiguous @ExceptionHandler method mapped for;
- @ExceptionHandler下方法返回值类型支持多种,常见的ModelAndView,@ResponseBody注解标
方法返回值可以为:
ModelAndView对象
Model对象
Map对象
View对象
String对象
还有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void
缺点: 几乎所有的Controller都需要进行异常处理,于是每个Controller都需要去写一个方法,不太方便
方法二 @ControllerAdvice+@ExceptionHandler
@ControllerAdvice注解声明一个注解类,这个注解类中的方法的某些注解会应用到所有的Controller里,其中就包括@ExceptionHandler注解。
/** * Created by liuruijie on 2016/12/28. * 全局异常处理,捕获所有Controller中抛出的异常。 */ @ControllerAdvice public class GlobalExceptionHandler { //处理自定义的异常 @ExceptionHandler(SystemException.class) @ResponseBody public Object customHandler(SystemException e){ e.printStackTrace(); return WebResult.buildResult().status(e.getCode()).msg(e.getMessage()); } //其他未处理的异常 @ExceptionHandler(Exception.class) @ResponseBody public Object exceptionHandler(Exception e){ e.printStackTrace(); return WebResult.buildResult().status(Config.FAIL).msg("系统错误"); } }
到此这篇关于Spring的异常处理@ExceptionHandler注解解析的文章就介绍到这了,更多相关Spring的异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- Spring中的@ExceptionHandler注解统一异常处理详解
- SpringMVC使用@ExceptionHandler注解在Controller中处理异常
- 关于SpringBoot使用@ExceptionHandler注解局部异常处理
- Spring中@ExceptionHandler注解的使用方式
- Spring中@ExceptionHandler注解的工作原理详解
- Spring @ExceptionHandler注解统一异常处理和获取方法名
- Spring中的@ControllerAdvice和@ExceptionHandler注解处理全局异常
- Spring中的@ExceptionHandler注解详解与应用示例
相关文章
Idea 解决 Could not autowire. No beans of ''xxxx'' type found
这篇文章主要介绍了Idea 解决 Could not autowire. No beans of 'xxxx' type found 的错误提示,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-01-01Springboot中路径参数带 (%2F)的问题彻底解决方案
这篇文章主要介绍了彻底解决Springboot中路径参数带(%2F)的问题,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06Java中IO流 RandomAccessFile类实例详解
这篇文章主要介绍了Java中IO流 RandomAccessFile类实例详解的相关资料,需要的朋友可以参考下2017-05-05Mybatis如何使用@Mapper和@MapperScan注解实现映射关系
这篇文章主要介绍了Mybatis使用@Mapper和@MapperScan注解实现映射关系,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10
最新评论