解决FeignException返回基础服务抛出的状态码

接上篇文章

解决FeignException返回基础服务抛出的状态码_第1张图片

这样,虽然能够很好的处理@Valid出现的异常,但是如果是主动抛出的自定义异常和Assert断言异常,则会进入FeignException.errorStatus处理,查看源码

解决FeignException返回基础服务抛出的状态码_第2张图片

它将message封装了feign抛出的status500以及body的content(即你主动抛出的message信息)

意味着,断言异常我们可以通过ErrorDecoder的方式再通过全局异常拦截获取message信息,如下图

status 500 reading IActivityFeignClient#add(ActivityDto); content:
{"timestamp":1524549437919,"status":500,"error":"Internal Server Error","exception":"java.lang.IllegalArgumentException","message":"标题不能为空","path":"/v1/activity/"}

因为此时,我并不需要基础服务抛出的具体code,

但是,我的初心是,假设基础服务抛出了自定义异常code比如1001,我希望调用方能准确获取到这个code状态码,但是上述通过ErrorDecoder的方式,只封装了status500和Message信息,body里面丢失了code,无奈,只能放弃此方式

直接在全局异常中捕获FeignException,获取原汁原味的exception异常信息,并约定好,Assert不允许在@HystrixCommand修饰的方法里使用,因为会触发服务熔断!

思考:为什么不通过ErrorDecoder处理,可以获取到code,通过errorDecoder处理了,则丢失了code?


你可能感兴趣的:(和光同尘)