zoukankan      html  css  js  c++  java
  • 重写定义Spring Boot FeignClient 捕获异常信息

    FeignClient 默认的解析器:

    public static FeignException errorStatus(String methodKey, Response response) {
    // 这里做了处理
    String message = format("status %s reading %s", response.status(), methodKey);
    try {
    if (response.body() != null) {
    String body = Util.toString(response.body().asReader());
    message += "; content:\n" + body;
    }
    } catch (IOException ignored) { // NOPMD
    }
    return new FeignException(response.status(), message);
    }
    默认截获的异常如下:

    {
    "timestamp": "2019-02-24 17:15:19",
    "status": 500,
    "error": "Internal Server Error",
    "message": "status 400 reading PaymentInterface#methodName(ParamType,ParamType)
    content: {"type":"http://httpstatus.es/404","title":"未找到资源","status":400,"detail":"这里是详细的异常信息"} ",
    "path": "/oauth/token"
    }
    自定义解析器:

    @Configuration
    public class FeignErrorDecoder implements ErrorDecoder {

    @Override
    public Exception decode(String methodKey, Response response) {
    try {
    // 这里直接拿到我们抛出的异常信息
    String message = Util.toString(response.body().asReader());
    try {
    JSONObject jsonObject = new JSONObject(message);
    return new BaseException(jsonObject.getString("message"),jsonObject.getInt("status"));
    } catch (JSONException e) {
    e.printStackTrace();
    }

    } catch (IOException ignored) {
    }
    return decode(methodKey, response);
    }
    }
    其中 BaseException类如:

    public class BaseException extends RuntimeException {
    private int status ;

    public int getStatus() {
    return status;
    }

    public void setStatus(int status) {
    this.status = status;
    }

    public BaseException() {
    }

    public BaseException(String message, int status) {
    super(message);
    this.status = status;
    }

    public BaseException(String message) {
    super(message);
    }

    public BaseException(String message, Throwable cause) {
    super(message, cause);
    }

    public BaseException(Throwable cause) {
    super(cause);
    }

    public BaseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    super(message, cause, enableSuppression, writableStackTrace);
    }
    }
    异常格式:

    {
    "timestamp": "2019-02-24 17:15:19",
    "status": 500,
    "error": "Internal Server Error",
    "message": "用户不存在",
    "path": "/oauth/token"
    }


    转载于:https://blog.51cto.com/4925054/2354156

  • 相关阅读:
    mongoDB学习第一天之增删改查
    django使用MySQL时部分配置
    centos部署Django项目的前提工作
    pytho中pickle、json模块
    php留言板的实现
    原本就有mysql,安装phpstudy使用里面自带的mysql导致原来的没服务
    ajax向php传参数对数据库操作
    JavaScript之图片懒加载的实现
    JavaScript之点赞特效
    ci框架根据配置自动生成controller控制器和model控制器(改版本)
  • 原文地址:https://www.cnblogs.com/javalinux/p/14365203.html
Copyright © 2011-2022 走看看