没有模型的改造 2 响应

Retrofit 2 response without model

针对此问题只有以下问题, 但他们没有解决我的问题。

问题:

假设我在 http://www.example.com/getSomething 的 api 会给出 {"Status":"False"}

// desired
public Apiinter{
  @GET("http://www.example.com/getSomething")
  Observable<Boolean> getSomething();
}

我想要像 Observale<Boolean> 作为 returned 的东西,在途中不做任何额外的 POJO,如何实现

我的尝试:

我可以使用 POJO/model(但我不想),我可以 return JSONObjectJSONElement ,但这不会使 Observable<Boolean> 成为 returned 值

说实话,我仍然宁愿使用 20 多个 POJO 而不是这个,但您可以考虑添加自定义 JsonDeserializer(假设您将使用 GSON 来解析 API 结果)。我能想到的解串器看起来是这样的:

   private static class BooleanDeserializer implements JsonDeserializer<Boolean> {
        @Override
        public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            JsonObject obj = json.getAsJsonObject();
            Set<Map.Entry<String, JsonElement>> entrySet = obj.entrySet();
            return ((JsonElement)entrySet.toArray()[0]).getAsBoolean();
        }
    }

并像这样设置你的 Gson:

Gson gson = new GsonBuilder()
                .registerTypeAdapter(Boolean.class, new BooleanDeserializer()).create();

还有你的 RestAdapter:

final RestAdapter.Builder builder = new RestAdapter.Builder()
                ...
                .setConverter(gson);

您可能想要稍微处理一下,当然,这只会在一定程度上节省您的工作量。我不知道您的 API 有何不同,但这对于您可能具有不同 API 结构但只有一个有用值的情况应该很有用。