使用 '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
。)
我正在使用改造调用 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
。)