没有模型的改造 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 JSONObject
或 JSONElement
,但这不会使 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 结构但只有一个有用值的情况应该很有用。
针对此问题只有以下问题
问题:
假设我在 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 JSONObject
或 JSONElement
,但这不会使 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 结构但只有一个有用值的情况应该很有用。