业务需求:向magic-api发送JSON类型请求数据,将请求得到的数据转换为实体List数组返回
实现思路:
1.将magic-api请求数据使用JSONObjetc.parseObject()函数转换为JSONObject
2.将发送请求后获取的数据使用JSON.toJSONString()进行转换;
3.将转换后的String类型数据再使用JSONArray.parseArray()函数转换为JSONArray数组类型数据;
4.再定义一个JSONObject类型变量,用于将上一步获取的JSONArray数组数据的进行转换,转换为实体类对应的Key;
5.定义实体类数组用于存放转换了Key后的数据;
6.遍历JSONArray数组的Key,将其Key设置为需要的Key,随后存入之前定义的JSONObject变量中;
7.定义实体变量,将JSONObject中的数据使用JSONObject.toJavaObject(JSONObject,parseObject(JSONObject.toJSONString(jsonObject数据)),实体类.class)函数转换为实体对象;
8.将转换后的实体对象存入步骤5中创建的实体数组;
9.根据获取到的状态码返回不同的数据。
具体实现:
@Override
public MultiResponse getLeaderboards(RemoteRequest remoteRequest){
JSONObject ranking = JSONObject.parseObject(JSON.toJSONString(remoteRequest));
MultiResponse rsp = restTemplateService.postForJson(url,ranking,MultiResponse.class);
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(rsp.getData()));
JSONObject jsonObject1 = new JSONObject();
List<LeaderboardResult> results = Lists.newArrayList();
for(int i = 0;i < jsonArray.size() ; i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
for(String key:jsonObject.keySet()){
if("abc".euals(key)){
jsonObject1.put("attributeScore",jsonObject.get(key));
} else if("def".euals(key)){
jsonObject1.put("attributeScore",jsonObject.get(key));
} else {
jsonObject1.put(key,jsonObject.get(key));
}
}
LeaderboardResult leaderboardResult = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(jsonObject1)),LeaderboardResult.class);
results.add(leaderboardResult);
}
if(CommonConstant.JUICER_SUCCESS_CODE.equals(rsp.getCode())){
if(results != null && results.size() >0){
return MultiResponse.of(results);
}
} else {
throw new PortraitsException("数据查询失败,请检查!")
}
return MultiResponse.of(null);
}