Как проанализировать различные данные XML в одном вызове дооснащения - PullRequest
0 голосов
/ 09 января 2019

Я использую simpxmlconvertor с модификацией в моем приложении для анализа xml-ответа от API. Ответ об успешном выполнении 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 голосов
/ 17 января 2019

Наконец я нашел одно решение для моего вопроса. Вместо того, чтобы пытаться проанализировать две разные модели, я перехватил ответ и добавил общий корневой элемент. Затем сделал узлы 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();
    }
}

Класс модели для анализа ответа.

@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;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...