14

我正在尝试解析出现问题时发送的服务器消息。消息以 JSON 格式发送:

{
    "Message" : "readable reason",
    "Id" : 0, // reason code
}

错误模型类:

public class RetrofitError
{
    private String message;
    private int id;
}

使用以下代码创建改造:

RestAdapter.Builder builder = new RestAdapter.Builder();

builder.setLog(new AndroidLog(LOG_TAG));
builder.setLogLevel(LogLevel.FULL);
builder.setEndpoint(Constants.getUrl());
builder.setRequestInterceptor(requestInterceptor);

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
gsonBuilder.setPrettyPrinting();

Gson gson = gsonBuilder.create();

builder.setConverter(new GsonConverter(gson));

RestAdapter restAdapter = builder.build();

以及检索错误:

RetrofitError error = (RetrofitError)retrofitError.getBodyAs(RetrofitError.class)

它毫无例外地工作,所以我似乎在做正确的事情。但它总是无法解析响应中的两个字段。Retrofit 只创建一次,它成功地检索和解析所有服务器响应,但错误除外。

我正在使用最新可用的 Retrofit jar - 1.4.1

我究竟做错了什么?

4

2 回答 2

1

如果您仍然面临此问题,请尝试执行此操作。我知道这是一个非常古老的问题,但它可能对其他人有所帮助。

    if (restError != null)
        failure(restError);
    else
    {
        failure(new RestError(error.getMessage()));
    }
于 2015-03-12T11:53:52.177 回答
0

getBodyAs获取 JSON 对象的简单解决方案。

JsonObject responseAsJson = (JsonObject) retrofitError.getBodyAs(JsonElement.class);

String  message = responseAsJson.get("Message").getAsString(); //=> "readable reason"
Integer      id = responseAsJson.get("Id").getAsInt();         //=> 0

确认在 Retrofit 1.x 中工作。不确定 Retrofit 2.x 需要进行哪些更改。

于 2018-01-23T04:48:38.643 回答