如何在单个改造调用中解析不同的 xml 数据

how to parse different xml data in single retrofit call

我在我的应用程序中使用带有改进的简单xml转换器来解析来自 API 的 xml 响应。 API 的成功响应如下。

<Success>
  <id>sf98hjf</id>
</Success>

错误响应如下。

<Error>
  <message>No data found</message>
</Error>

我的模型class解析成功响应如下

 @Root(name = "Success")
public class ResponseModel {
@Element
private String id;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

}

当我得到成功响应时,这很好用。但我也想解析错误响应以向用户显示错误消息。我怎样才能达到同样的效果。现在我遇到异常,因为结构不匹配。提前致谢。

我终于找到了解决问题的方法。我没有尝试使用 2 个不同的模型进行解析,而是拦截了响应并添加了一个公共根元素。然后将 Success 和 Error 节点设为可选。因此无论响应是成功还是错误,相同的模型都会解析它。代码如下。

public class XmlInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response = chain.proceed(chain.request());
        ResponseBody body = response.body();
        String wrappedBody = "<Response>" + body.string() + "</Response>";
        return response.newBuilder()
                .body(ResponseBody.create(body.contentType(), wrappedBody))
                .build();
    }
}

要解析响应的模型 class。

@Root(name = "Response")
public class UploadResponseModel {
@Element(required = false)
private UploadSuccessModel Success;
@Element(required = false)
private ErrorModel Error;

public UploadSuccessModel getSuccess() {
    return Success;
}

public void setSuccess(UploadSuccessModel success) {
    Success = success;
}

public ErrorModel getError() {
    return Error;
}

public void setError(ErrorModel error) {
    Error = error;
}
}