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

时间:2019-01-09 13:29:15

标签: android retrofit simple-xml-converter

我在我的应用程序中使用经过改装的simplxmlconvertor来解析来自API的xml响应。 API的成功响应如下。

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

下面给出了错误响应。

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

下面给出了我解析成功响应的模型类

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

public String getId() {
    return id;
}

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

}

当我收到成功回复时,这很好用。但是我也想解析错误响应,以便向用户显示错误消息。我怎么能达到同样的目的。现在,由于结构不匹配,我遇到了异常。预先感谢。

1 个答案:

答案 0 :(得分:1)

最后,我为我的问题找到了一个解决方案。我没有尝试解析2种不同的模型,而是截取了响应并添加了一个公共根元素。然后将“成功”和“错误”节点设为可选。因此,无论响应是成功还是错误,同一模型都会对其进行解析。代码如下。

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();
    }
}

用于解析响应的模型类。

@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;
}
}