无模型改造2响应

时间:2017-10-10 09:25:17

标签: android json retrofit2 rx-java2

此问题仅针对此问题提出以下问题12 但他们没有解决我的问题。

问题:

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

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

我希望返回Observale<Boolean>之类的内容,而不会在路上添加任何额外的 POJO ,如何实现

我的尝试:

我可以使用 POJO /模型(但我不想),我可以返回JSONObjectJSONElement,但这不会使make {{ 1}}作为返回值

1 个答案:

答案 0 :(得分:0)

说实话,我还是宁愿选择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结构但只有一个有用值的情况非常有用。