使用@RestControllerAdvice怎么对异常进行处理


本篇文章给大家分享的是有关使用@RestControllerAdvice怎么对异常进行处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。从DispatcherServlet入口,如下:进入异常处理的地方 进入到resolveException方法,默认解析器有3个,ExceptionHandlerExceptionResolver,ResponseStatusExceptionResolver,DefaultHandlerExceptionResolver;具体实例化的地方在WebMvcConfigurationSupport#addDefaultHandlerExceptionResolvers方法 先看ExceptionHandlerExceptionResolver的处理如下: ExceptionHandlerExceptionResolver初始化的时候, find所有ControllerAdvice Annotion注解的bean(找@ControllerAdvice注解或者其作为meta annotation,可以看下AnnotationUtils#findAnnotation方法),并排序;如果该类实现了ResponseBodyAdvice(可自定义扩展统一response的返回)接口 找到标有ExceptionHandler注解的方法,并缓存再exceptionHandlerCache上,然后判断该ControllerAdviceBean是否能应用到该controller上 可以看一下ControllerAdvice注解Allowsformoreconciseannotationdeclarationse.g.:
*{@code@ControllerAdvice(“org.my.pkg”)}isequivalentto
*{@code@ControllerAdvice(basePackages=”org.my.pkg”)}.
*@since4.0
*@see#basePackages()
*/
@AliasFor(“basePackages”)
String[ 香港云主机]value()default{};

/**
*Arrayofbasepackages.
*Controllersthatbelongtothosebasepackagesorsub-packagesthereof
*willbeincluded,e.g.:{@code@ControllerAdvice(basePackages=”org.my.pkg”)}
*or{@code@ControllerAdvice(basePackages={“org.my.pkg”,”org.my.other.pkg”})}.
*{@link#value}isanaliasforthisattribute,simplyallowingfor
*moreconciseuseoftheannotation.
*Alsoconsiderusing{@link#basePackageClasses()}asatype-safe
*alternativetoString-basedpackagenames.
*@since4.0
*/
@AliasFor(“value”)
String[]basePackages()default{};

/**
*Type-safealternativeto{@link#value()}forspecifyingthepackages
*toselectControllerstobeassistedbythe{@code@ControllerAdvice}
*annotatedclass.
*Considercreatingaspecialno-opmarkerclassorinterfaceineachpackage
*thatservesnopurposeotherthanbeingreferencedbythisattribute.
*@since4.0
*/
Class>[]basePackageClasses()default{};

/**
*Arrayofclasses.
*Controllersthatareassignabletoatleastoneofthegiventypes
*willbeassistedbythe{@code@ControllerAdvice}annotatedclass.
*@since4.0
*/
Class>[]assignableTypes()default{};

/**
*Arrayofannotations.
*Controllersthatareannotatedwiththis/oneofthoseannotation(s)
*willbeassistedbythe{@code@ControllerAdvice}annotatedclass.
*Considercreatingaspecialannotationoruseapredefinedone,
*like{@linkRestController@RestController}.
*@since4.0
*/
ClassextendsAnnotation>[]annotations()default{};

}最后,定位到ServletInvocableHandlerMethod#invokeAndHandle异常方法处理 RequestResponseBodyMethodProcessor#handleReturnValue 通过消息解析器,把流写出去 在body writer之前,会先调用ResponseBodyAdvice match做一层处理,也就是说, 以上就是使用@RestControllerAdvice怎么对异常进行处理,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。

相关推荐: win10怎么开启键盘背光灯

本篇内容介绍了“win10怎么开启键盘背光灯”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.华硕笔记本键盘背光灯开启方法:在ELAN-Smart Pad中将“…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/26 10:10
下一篇 07/26 10:10

相关推荐