Spring异常处理

  • @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度

  • @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开

  • @ResponseStatus:可以将某种异常映射为HTTP状态码

    @ControllerAdvice public class ExceptionsHandler {

    1//可以直接写@ExceptionHandler,不指明异常类,会自动映射 2@ExceptionHandler(CustomGenericException.class) 3public ModelAndView customGenericExceptionHnadler(CustomGenericException exception){ 4 //还可以声明接收其他任意参数 5 ModelAndView modelAndView = new ModelAndView("generic_error"); 6 modelAndView.addObject("errCode",exception.getErrCode()); 7 modelAndView.addObject("errMsg",exception.getErrMsg()); 8 return modelAndView; 9} 10 11@ExceptionHandler(Exception.class)//可以直接写@EceptionHandler,IOExeption继承于Exception 12public ModelAndView allExceptionHandler(Exception exception){ 13 ModelAndView modelAndView = new ModelAndView("generic_error"); 14 modelAndView.addObject("errMsg", "this is Exception.class"); 15 return modelAndView; 16}

    }

1、@ExceptionHandler

2、@ControllerAdvice

3、@ResponseStatus

1@Controller 2@RequestMapping("/exception") 3public class ExceptionController { 4 5 @RequestMapping(value = "/{type}", method = RequestMethod.GET) 6 public ModelAndView getPages(@PathVariable(value = "type") String type) throws Exception{ 7 if ("error".equals(type)) { 8 // 由handleCustomException处理 9 throw new CustomGenericException("E888", "This is custom message"); 10 } else if ("io-error".equals(type)) { 11 // 由handleAllException处理 12 throw new IOException(); 13 } else { 14 return new ModelAndView("index").addObject("msg", type); 15 } 16 } 17}

4、HandlerExceptionResolver

  • Spring MVC提供的非常好的通用异常处理工具
  • 只能处理请求过程中抛出的异常
  • 异常处理本身所抛出的异常 、视图解析过程中抛出的异常 :不能处理
  • 可以存在多个实现了HandlerExceptionResolver的异常处理类
  • 执行顺序,由其order属性决定, order值越小,越是优先执行
  • 执行到第一个返回不是null的ModelAndView的Resolver时,结束

5、mvc:annotation-driven/自动将以下三个配置到Spring MVC

  • HandlerExceptionResolver:优先级最高
  • ResponseStatusExceptionResolver:第二
  • DefaultHandlerExceptionResolver:最低
  • SimpleMappingExceptionResolver:需要自己配置
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

微信小程序new Date()转换时间异常问题

微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT

03.Android崩溃Crash库之ExceptionHandler分析

目录总结00.异常处理几个常用api01.UncaughtExceptionHandler02.Java线程处理异常分析03.Android中线程处理异常分析04.为何使用setDefaultUncaughtExceptionHandler前沿上一篇整体介绍了crash崩溃

Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常

需求:  1.springboot 项目restful 风格统一放回json  2.不在controller写trycatch代码块简洁controller层  3.对异常做统一处理,同时处理@Validated校验器注解的异常方法:  @ControllerAdvice注解定义全局异常处理类@ControllerAdvice