使用 'retrofit' 库响应具有空字段

Using 'retrofit' library response has null fields

我正在使用改造调用 REST 服务。 REST 服务 returns 一条 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 吗?

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

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

中一样

所以,试试这个:

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