自定义api接口数据格式转换器
一、后台实现ApiDataConvertAdapter接口
pageList为自定义的集合对象,如图一
注意:如果不需要的可以不用实现,如分页(getTotal、getCount就不用实现)
/**
* @program: jimureport-demo
* @description: 编写适配器,实现ApiDataConvertAdapter
* @date 2021-06-03
*/
@Component("customParser")
public class MyApiDataConvertAdapter implements ApiDataConvertAdapter {
/**
* 返回list数据集,转换成积木报表需要格式{},没有嵌套
* 注意:需要json格式,不用data包裹起来了
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getData(JSONObject jsonObject) {
if(jsonObject.containsKey("pagelist")){
JSONArray pageList = jsonObject.getJSONArray("pagelist");
JSONArray array = new JSONArray();
for (int i = 0; i < pageList.size(); i++) {
JSONObject object = new JSONObject();
String name = pageList.getJSONObject(i).getString("name");
String id = pageList.getJSONObject(i).getString("id");
String zhicheng = pageList.getJSONObject(i).getString("zhicheng");
JSONArray fuze = pageList.getJSONObject(i).getJSONArray("fuze");
for (int j = 0; j < fuze.size(); j++) {
String banji = fuze.getJSONObject(j).getString("banji");
String xueke = fuze.getJSONObject(j).getString("xueke");
object.put("name",name);
object.put("id",id);
object.put("zhicheng",zhicheng);
object.put("banji",banji);
object.put("xueke",xueke);
array.add(object);
}
}
return array.toJSONString();
}else{
return "";
}
}
/**
* 返回links(没有图表属性可以删掉)
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getLinks(JSONObject jsonObject) {
return jsonObject.containsKey("links") ? jsonObject.get("links").toString() : "";
}
/**
* 返回总页数(没有分页可以删掉)
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getTotal(JSONObject jsonObject) {
return jsonObject.containsKey("pageNumber") ? jsonObject.get("pageNumber").toString() : "0";
}
/**
* 返回总条数(没有分页可以删掉)
* @param jsonObject 接口数据原始对象
* @return
*/
@Override
public String getCount(JSONObject jsonObject) {
return jsonObject.containsKey("count") ? jsonObject.get("count").toString() : "0";
}
}
图一
二、前台调用格式转换器,方便每一个api都有不同的转换器
1.api数据集中填写转换器,如图二,
2.对应后台@Component括号里面的,如图三
图二
图三
3.点击解析api即可
三、注意事项
在使用这个转换器之前需要了解一个前提: API接口返回的数据格式严格限制,必须如下:
- total(总页数)和count(总条数)在不分页的情况下可以不提供
- data必须是一个数组(集合),数组的每个元素中的属性值必定为字符串或数值,即不支持嵌套对象。
当我们api返回的数据与积木报表不匹配的时候,那么我们就需要做一下api转换,转换成系统可识别的数据格式,即上述格式,本章已重写getData方法为例,具体操作步骤如下
1、返回后台接口的部分json
{
"pagelist": [
{
"zhicheng": "教师",
"name": "张三",
"fuze": [
{
"xueke": "数学",
"id": "00",
"banji": "0班"
},
{
"xueke": "数学",
"id": "01",
"banji": "0班"
}
]
}
]
}
2、需要组成成最后结果的部分json
[
{
"xueke": "数学",
"zhicheng": "教师",
"name": "张三",
"id": "00",
"banji": "0班"
},
{
"xueke": "数学",
"zhicheng": "教师",
"name": "张三",
"id": "01",
"banji": "0班"
}
]