我在我的代码中使用非常旧的第三方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种不同类型的响应的方法。应该如何处理。
答案 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字符串记录到您的数据库:)