2017-10-10 69 views
0

只有以下问题要求此问题1,2 但他们不解决我的问题。改装2响应没有型号

问:

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

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

我想是这样Observale<Boolean>返回的,未做任何额外POJO的方式,如何实现这一

我尝试:

我可以使用POJO /模型(但我不想),我可以返回JSONObjectJSONElement,但这将不会使Observable<Boolean>作为返回值

+0

我会尝试自定义转换器。但为什么不POJO? – Raghunandan

+0

这只是一个api的例子我有20 + api的只有一个变量作为json响应返回,所以想象做出那么多pojo的 –

+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结构但只有一个有用值的情况应该是有用的。

+0

我认为这可能是我需要感谢的东西 –

+0

不客气!我忘了提及你可能想返回Observable 而不是布尔(我不想深入了解,因为我不是很熟练rx-java),但我相信你会管理。 – Bjelis