2015-05-19 36 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字段名不同的映射。)