Spring Boot框架Feign调用返回原始异常信息

假设有两个服务Consumer与Provider,在Spring Boot框架中,Consumer服务通过Feign方式调用Provider服务。

在Provider服务中进行通用异常处理,代码如下:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = ServiceException.class)
    public ResponseEntity handleServiceException(ServiceException e) {
        return new ResponseEntity(new InnerResult(e.getErrCode(), e.getErrMsg()), 
         HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(value = Exception.class)
    public ResponseEntity handleException(Exception e) {
        InnerResult innerResult = new InnerResult(500, "系统异常");

        return new ResponseEntity(innerResult, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

其中ServiceException是自定义的异常类,InnerResult是自定义的对象,用来承载返回的错误码与错误信息。

在Consumer服务中配置Feign的异常处理,代码如下:

public class CommonFeignErrorDecoder extends ErrorDecoder.Default {
    @Override
    public Exception decode(String methodKey, Response response) {
        try {
            String result = Util.toString(response.body().asReader(Charset.defaultCharset()));

            InnerResult innerResult = JsonUtil.fromJsonString(result, InnerResult.class);

            return new ServiceException(innerResult.getCode(), innerResult.getMsg());
        } catch (Exception e) {
            return new ServiceException("系统繁忙,请稍后重试");
        }
    }
}

这里面干的事情就是将返回的异常码与异常信息,重新组装成异常类ServiceException。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容