我有一个关键值对的json对象需要使用改造在post请求中发送
{
"Criteria":{
"DisciplineId":0,
"SeasonId":0,
"Leagues":[
],
"StartDate":"06 Sep 2013",
"EndDate":"14 Dec 2013",
"RoundId":0,
"GroupId":0,
"MatchesScores":3
},
"SearchInfo":{
"PageNumber":1,
"PageSize":20,
"Sort":1,
"TotalRecords":542
}
}
我正在考虑创建一个匹配json对象的gson定义的POJO,然后使用POJO类中的setter来设置每个键值对的值。
所以我会有类似的东西
@FormUrlEncoded
@POST("/getMatches")
void getMatches(@Field("Criteria") Criteria criteria,@Field("SearchInfo") SearchInfo searchInfo, Callback<JSONKeys> keys);
我是否在正确的轨道上?
如何看到json对象中有两个嵌套的json对象以及带有这些对象之一的json数组?
答案 0 :(得分:2)
您可以创建包含这两者的请求类。只要成员变量的名称与json匹配(或者您使用SerializedName),转换就会自动发生。
class MyRequest{
@SerializedName("Criteria") Criteria criteria;
@SerializedName("SearchInfo") SearchInfo searchInfo;
}
Criteria
的位置:
class Criteria {
@SerializedName("DisciplineId") int disciplineId;
@SerializedName("SeasonId") int seasonId;
@SerializedName("Leagues") List<Integer> leagues; // Change Integer to datatype
@SerializedName("StartDate") String startDate;
@SerializedName("EndDate") String endDate;
@SerializedName("RoundId") int roundId;
@SerializedName("GroupId") int groupId;
@SerializedName("MatchesScores") int matchesScores;
}
SearchInfo
是:
class SearchInfo{
@SerializedName("PageNumber") int pageNumber;
@SerializedName("PageSize") int pageSize;
@SerializedName("Sort") int sort;
@SerializedName("TotalRecords") int totalRecords;
}
使用try(请参阅here):
@POST("/getMatches")
public void getMatches(@Body MyRequest request, Callback<Boolean> success);
Retrofit在内部使用Gson,会自动将您的MyRequest
对象转换为您在问题中描述的json格式。
注意:通常将json键命名为带下划线的小写,将java命名为camelcase。然后,不是在任何地方使用SerializedName
,而是在创建gson对象时设置密钥命名约定(请参阅here):
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create()