zoukankan      html  css  js  c++  java
  • @ControllerAdvice @ExceptionHandler @ResponseStatus spring全局异常拦截

    1:@ControllerAdvice:全局捕获异常,异常集中处理,更好的使业务逻辑与异常处理剥离开

    • 把@ControllerAdvice定义在一个类上,该类则负责捕获所有@RequestMapping上发生的异常(包括controller调用的service)

    2:@ExceptionHandler(value = Exception.class):统一处理某一类异常

    • 把@ExceptionHandler(value = Exception.class)定义在一个方法上,声明该方法用于捕获value所指的类型的异常(注意:当该异常的子父类都被声明时,按照先子后父的顺序进行捕获)
    • 在方法中捕获到异常进行处理后,即可重定向到一个视图,也可返回一个json;此时需要@ResponseBody。

    3:@ResponseBody

    •    和@ExceptionHandler一同用在方法上,声明在方法中捕获到异常并进行处理后,返回的数据类型不是html页面,而是某种格式的数据。(@ResponseBody的本质作用)

     4:@ResponseStatus:将某种异常映射为HTTP状态码,可用在方法上,也可以用在类上(自定义运行时异常类)。

    • 当作用到异常类上时,实际上就是将该异常类的对象转换成某个HTTP状态码,然后以该状态码去通知客户端。(本文不再讨论)
    • 当作用到方法上时,实际上就是改变方法返回值的HTTP状态码,然后返回给客户端。

    例子如下:

    补充:上图例子虽然是对GunsException异常的捕获,并在方法中进行了处理,最终在方法返回时,如果没有加上@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR),则该方法返回给客户端的状态码是200(即正常状态码),如果是ajax发送的请求,则会回调success()方法。但是加上@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)之后,该方法返回给客户端的状态码就变了。所以:@ResponseStatus如果加在方法上,就是改变方法返回值的HTTP状态码。

  • 相关阅读:
    C#移动及改变控件大小
    flutter学习(状态组件,组件)
    dart学习1
    rn的优化
    git命令
    Immutable
    树形数据结构的搜索功能
    promise
    js出场率极高的代码
    js浮点数计算精度解决方案
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302506.html
Copyright © 2011-2022 走看看