我正在使用改造调用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吗?
答案 0 :(得分:2)
在构建setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
对象时设置Gson
。
因此,Gson现在将尝试将Java字段名paramOne
映射到JSON中具有键ParamOne
的值。但是没有这样的值 - 它被称为paramOne
,就像在Java类中一样。
所以,试试这个:
setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
。 (如果需要从JSON密钥到Java字段名称的不同映射,您仍然可以使用@SerializedName
。)