【发布时间】:2022-01-07 22:55:57
【问题描述】:
我正在调用一个第三方 API,它返回两个不同值的相同参数名称,如下所示,
ActivationResponse activationResponse = new ActivationResponse();
ResponseEntity<ActivationResponse> response = null;
response = restTemplate.exchange(Url, HttpMethod.POST, request, ActivationResponse.class);
activationResponse = response.getBody();
错误响应:
{
"executionCode":"2",
"executionMessage":"NullPointerException Occured!",
"response":"java.lang.NullPointerException"
}
成功响应:
{
"executionCode" : "0",
"executionMessage" : "SUCCESS",
"response" : {
"orderID" : "79966036"
}
}
作为示例响应,response 参数可以作为字符串或 JSON 对象出现。
目前响应模型如下,
public class ActivationResponse {
private String executionCode;
private String executionMessage;
private ActivationResponseDetails response;
}
public class ActivationResponseDetails {
private String orderID;
}
当错误来临时,抛出异常,表示无法处理response参数。请建议如何在没有问题的情况下处理成功和失败的情况。
请注意,answer 中的方法是不可能的,因为我必须按以下方式打印日志,所以使用@JsonIgnore 不会在日志中显示该参数。
日志是这样打印的,
log.info("ActivationResponse json : {}", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(response.getBody()));
【问题讨论】:
-
必须反序列化为单一类型吗?成功映射到 OkResponse 和错误映射到 ErrorResponse 是不可能的吗?
-
澄清一下:出现问题是因为没有orderID?
-
@morsor 成功响应映射没有错误。但是错误响应给出了一个例外。我认为这是因为在错误情况下它期望一个 json 对象但接收一个字符串。
-
@SirHawrk 在错误场景中,“response”参数以字符串形式出现,而不是 json 对象。我想知道如何在不出现异常的情况下处理成功和错误情况
-
@cmb28:是的——我知道这就是问题所在。我的问题是您是否必须将所有响应映射到完全相同的结构?成功和错误映射到不同类型是完全正常的
标签: json spring-boot jackson