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注解详解与应用示例
相关文章
Java/Web调用Hadoop进行MapReduce示例代码
本篇文章主要介绍了Java/Web调用Hadoop进行MapReduce示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-11-11
Spring Boot 基于 SCRAM 认证集成 Kafka 的过程详解
在本篇文章中,我们将探讨如何在 Spring Boot 应用中集成 Kafka 并使用 SCRAM 认证机制进行安全连接,并实现动态创建账号、ACL 权限、Topic,以及生产者和消费者等操作,感兴趣的朋友跟随小编一起看看吧2024-08-08
Java C++题解leetcode字符串轮转KMP算法详解
这篇文章主要为大家介绍了Java C++题解leetcode字符串轮转KMP算法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-09-09


最新评论