休息Api对成功和失败的反应不同

时间:2018-05-09 06:43:07

标签: java rest response

我在我的代码中使用非常旧的第三方API,例如在成功和失败的情况下返回不同的响应,例如

成功

 SuccessResObj{
     a{...
        b{...
           c{...}
         }
      }
    }

实际SuccessResObj有大约10-15个嵌套对象。

失败

    FailureResObj{
     status="failure because of ...";
     code="400"; // code will always be 400 in case of failure, irrespective of reason of failure
    }

FailureResObj只有2个变量。

我知道它的错误,但是第三方API不会改变响应,我必须在我的代码中进行解决,我应该如何处理它,因为我需要在数据库中记录这两个场景。

修改

我尝试创建一个WrapperBean

WrapperBean{
 SuccessResObj;
 FailureResObj;
}

WrapperBean = ApiResonse();

然后是它的ClassCastExcaption,因为响应只是一种类型的对象,我试图将它映射到具有2个对象的WrapperBean。

此类回复的样本处理代码将不胜感激。

它可以简单地被认为是随机返回2种不同类型的响应的方法。应该如何处理。

2 个答案:

答案 0 :(得分:0)

当您使用RestTemplate时,如果没有200个HTTP状态,RestTemplate将抛出HttpClientErrorException

以下是示例代码:

try {
    String successResponse = restTemplate.exchange(uri, httpMethod, httpEntity, String.class);
    // convert String in to Object using object mapper
} catch (HttpClientErrorException e) {
    if (e.getStatusCode().value() == 400) {
        String errorResponse = e.getResponseBodyAsString();
        // convert String in to Object using object mapper
        }
    }
}

有关ObjectMapper view this

的更多信息

答案 1 :(得分:0)

您可以使用Jackson将结果转换为json字符串。

Examlpe:

static class C {
    String val;

    public String getVal() {
        return val;
    }

    public void setVal(String val) {
        this.val = val;
    }
}
static class B {
    private C c;

    public C getC() {
        return c;
    }

    public void setC(C c) {
        this.c = c;
    }
}
static class A {
    private B b;

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
}

static class SuccessResObj {
    private A a;

    public A getA() {
        return a;
    }

    public void setA(A a) {
        this.a = a;
    }
}

static class FailureResObj{
    private String status;
    private String code;

    public String getStatus() {
        return status;
    }

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

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

public static void main(String[] args) throws JsonProcessingException {
    A a = new A();
    B b = new B();
    C c = new C();
    c.setVal("Hello World.");
    b.setC(c);
    a.setB(b);
    SuccessResObj successResObj = new SuccessResObj();
    successResObj.setA(a);
    FailureResObj failureResObj = new FailureResObj();
    failureResObj.setCode("400");
    failureResObj.setStatus("failure because of ...");
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(successResObj);
    System.out.println(json);
    json = mapper.writeValueAsString(failureResObj);
    System.out.println(json);
}

输出:

{"a":{"b":{"c":{"val":"Hello World."}}}}
{"status":"failure because of ...","code":"400"}

然后,将json字符串记录到您​​的数据库:)