Решение:
Пожалуйста, следуйте инструкциям ниже.
Сначала создайте класс модели:
public class MyResponse {
public int page;
public int pageSize;
public int totalPageCount;
public Map<String, String> data;
(make setter getter for page, pageSize, totalPageCount)
.......
.......
}
, затем создайте пользовательскийКласс как:
class RedirectionInfoDeserializer implements JsonDeserializer<MyResponse> {
private static final String KEY_PAGE = "page";
private static final String KEY_PAGESIZE = "pageSize";
private static final String KEY_TOTALPAGECOUNT = "totalPageCount";
private static final String KEY_DATA = "data";
@Override
public MyResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final JsonObject jsonObject = json.getAsJsonObject();
// Read simple String values.
final String page = jsonObject.get(KEY_PAGE).getAsInt();
final String pageSize = jsonObject.get(KEY_PAGESIZE).getAsInt();
final String pageCount = jsonObject.get(KEY_TOTALPAGECOUNT).getAsInt();
// Read the dynamic parameters object.
final Map<String, String> data = readParametersMap(jsonObject);
RedirectionInfo result = new RedirectionInfo();
result.setUri(uri);
result.setHttpMethod(httpMethod);
result.setParameters(parameters);
return result;
}
@Nullable
private Map<String, String> readParametersMap(@NonNull final JsonObject jsonObject) {
final JsonElement paramsElement = jsonObject.get(KEY_DATA);
if (paramsElement == null) {
// value not present at all, just return null
return null;
}
final JsonObject parametersObject = paramsElement.getAsJsonObject();
final Map<String, String> parameters = new HashMap<>();
for (Map.Entry<String, JsonElement> entry : parametersObject.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().getAsString();
data.put(key, value);
}
return data;
}
}
затем создайте метод как:
private Converter.Factory createGsonConverter() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyResponse.class, new RedirectionInfoDeserializer());
Gson gson = gsonBuilder.create();
return GsonConverterFactory.create(gson);
}
затем внесите это изменение в вашу модификацию:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://myserver.com")
.addConverterFactory(createGsonConverter())
.build();
Вот и все.
Попробуйте, дайте мне знать, если это работает.