2016-11-09 32 views
2

我有問題在改造lib中使用模型類。後端側的字段名稱已更改。是否可以在沒有模型類的情況下使用改造?

是否可以在沒有模型類的情況下得到響應?

+0

參考http://stackoverflow.com/questions/37119905/retrofit-2-without- model-class – sasikumar

+4

如果您的後端不可靠,那麼Retrofit可能是錯誤的庫。只需堅持使用OkHttp –

+0

問題不會使敏感... *改造 - **類型安全** Square,Inc.的Android和Java HTTP客戶端* ... *是否可以在沒有模型類的情況下獲得響應? * **那麼你最後得到什麼?** – Selvin

回答

1

是否有可能獲得無模型類

響應如果我讓你正確的 - 肯定。你不必做出響應JSON自動轉換。如果需要,您可以通過檢索原始響應輕鬆地完成此操作。一旦你得到了,你可以做任何你需要的。

+0

感謝Mr.Marcin Orlowski。問題固定 – Vadivel

0

使用不同的返回值是完全可能的。我假設你目前使用Gson來反序列化JSON響應,並將它們轉換爲實際的類。但是,您可以選擇將返回的響應轉換爲JsonElement(或更具體的JSON類),在這種情況下,您將獲得一個JSON項目,您可以根據需要操作它。例如:

@GET("url") 
Call<JsonElement> apiCall(); 
+2

我不認爲轉換器是問題。 OP表示JSON字段已更改,因此使傑克遜或Gson將提供的潛在JSON註釋無效 –

+0

感謝Mr.Malcolm,我修復了問題 – Vadivel

+0

@Vadivel您可以將幫助您的答案upvote,並且不要忘記接受最能幫助你的一個。 – Malcolm

3

是的,你可以。

@POST("url") 

Call<JsonObject> register(@Query("name") String name, 

          @Query("password") String password); 

只需根據您的響應而不是Model類編寫JsonArray或JsonObject。

然後,得到的JSONObject或JsonArray您迴應得到如下

Call<JsonObject> call = application.getServiceLink().register(); 

call.enqueue(new Callback<JsonObject>() { 
      @Override 
      public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 
       JsonObject object = response.body(); 
       //parse object 
      } 

      @Override 
      public void onFailure(Call<JsonObject> call, Throwable t) { 

      } 
     }); 
+0

嗨,謝謝你的迴應,我有非法論證異常,請告訴我如何定義改造。它不在GET方法中工作 – Vadivel

+0

感謝Mr.chetan,問題修復 – Vadivel

0

數據你可以簡單地「重命名」現場就在這裏使用

@SerializedName("newFieldName") 
SomeClass oldField; 
2

@Vadivel你身邊這是基於@chetan工作的GET版本:

@GET("http://your.api.url") 
Call<JsonObject> getGenericJSON(); 

Call<JsonObject> call = api.getGenericJSON(); 
call.enqueue(new Callback<JsonObject>() { 

    @Override 
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 
     if (response.isSuccessful() && response.body() != null) { 
      Log.d(TAG, response.body().toString()); 
     } else { 
      Log.e(TAG, "Error in getGenericJson:" + response.code() + " " + response.message()); 
     } 
    } 

    @Override 
    public void onFailure(Call<JsonObject> call, Throwable t) { 
     Log.e(TAG, "Response Error"); 
    } 
}); 
相關問題