2015-05-19 37 views
1

我使用翻新來調用REST服務。 REST服務返回一個JSON消息。 Java響應對象具有空字段值。使用'retrofit'庫響應具有空字段

設置代碼:

Gson gson = new GsonBuilder() 
     .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) 
     .create(); 

RestAdapter restAdapter = new RestAdapter.Builder() 
     .setConverter(new GsonConverter(gson)) 
     .setEndpoint(myEndpoint).build(); 

restAdapter.setLogLevel(LogLevel.FULL); 
SomeService someService = restAdapter 
     .create(SomeService.class); 

服務接口:

public interface SomeService { 
    @POST("/firstParam/{firstParam}/secondParam/{secondParam}") 
    MyResponse callService(@Path("firstParam") String firstParam, 
      @Path("secondParam") String secondParam, @Body MyRequest request); 
} 

的響應POJO的:

class MyResponse { 
    private String paramOne; 
    private String paramTwo; 
    private String action; 
    private String status; 

    //getters and setters 
} 

但是,當我打電話:

MyResponse response = someService.callService("one","two",request); 

響應中的字段仍然爲空。

我不得不使用自定義的JsonDeserializer來讓它工作,但我認爲這是標準的東西,它不應該需要JsonDeserializer。

你可以建議一種方法,使我無法使用JsonDeserializer嗎?

+0

它可能會更容易幫助你,如果我們能找到一些示例響應JSON ... –

+0

@大衛。 mihola在此感謝{ 「paramOne」:「456」, 「paramTwo」:「123」, 「action」:「actionOne」, 「status」:「success」 } – jakstack

回答

2

當您構建您的Gson對象時,您設置了setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)對象。

因此,Gson現在會嘗試在您的JSON中將Java字段名稱paramOne映射爲值爲ParamOne的值。但是不存在這樣的價值 - 它被稱爲paramOne,就像在Java類中一樣。

所以,試試這個:

  • 離開了setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)。 (您仍然可以使用@SerializedName的情況下,你需要從JSON關鍵的Java字段名不同的映射。)