使用'改造'库响应具有空字段

时间:2015-05-19 11:40:49

标签: retrofit

我正在使用改造调用REST服务。 REST服务返回JSON消息。 Java响应对象具有空字段值。

设置代码:

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吗?

1 个答案:

答案 0 :(得分:2)

在构建setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)对象时设置Gson

因此,Gson现在将尝试将Java字段名paramOne映射到JSON中具有键ParamOne的值。但是没有这样的值 - 它被称为paramOne,就像在Java类中一样。

所以,试试这个:

  • 忽略setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)。 (如果需要从JSON密钥到Java字段名称的不同映射,您仍然可以使用@SerializedName。)