magic-api自定义返回响应结构
接下来改造返回的数据结构,由于es返回的是一个LinkedHashMap数据类型,所以我们就使用LinkedHashMap来接收返回的数据结构,然后将它转换成JSONObject进行解析,最后封装成PageResult对象返回。在magic-api操作界面定义脚本,查询es里面的数据。可以通过脚本来调用java代码来实现;查询后返回的结果并不是我们想要的。
·
1、问题描述
在magic-api操作界面定义脚本,查询es里面的数据
import elasticsearch;
let from = (page - 1 ) * size
let dsl = {
_source: ['name','age'],
from,
size
};
return elasticsearch.index("user-index01").search(dsl)
查询后返回的结果并不是我们想要的
2、解析es数据结构
可以通过脚本来调用java代码来实现;
接下来改造返回的数据结构,由于es返回的是一个LinkedHashMap数据类型,所以我们就使用LinkedHashMap来接收返回的数据结构,然后将它转换成JSONObject进行解析,最后封装成PageResult对象返回。
在项目中创建出这个实现类,代码如下:
@Service("esResponseResultService")
public class EsResponseResultHandler implements EsResponseResultService {
@Override
public PageResult handlerResponse(LinkedHashMap dataMap) {
JSONObject jsonObject = JSONUtil.parseObj(dataMap);
JSONObject response = jsonObject.getJSONObject("hits");
long total = response.getJSONObject("total").getLong("value");
JSONArray hits = response.getJSONArray("hits");
List<JSONObject> jsonObjects = hits.toList(JSONObject.class);
List<JSONObject> records = new ArrayList<>();
for (JSONObject hit : jsonObjects) {
JSONObject sourceAsString = hit.getJSONObject("_source");
records.add(sourceAsString);
}
PageResult<JSONObject> resPage = new PageResult<>();
resPage.setTotal(total);
resPage.setRecords(records);
return resPage;
}
}
@Data
public class PageResult<T> {
private long total;
private List<T> records;
public PageResult() {
}
public PageResult(long total, List<T> records) {
this.total = total;
this.records = records;
}
}
3、脚本调用java代码
//注入spring bean,使用bean的名称
import "esResponseResultService" as esResponseResultService;
import elasticsearch;
let from = (page - 1 ) * size
let dsl = {
_source: ['name','age'],
from,
size
};
let data = elasticsearch.index("user-index01").search(dsl)
//调用java方法
return esResponseResultService.handlerResponse(data);
执行脚本,查询返回的结构如下:
更多推荐
已为社区贡献1条内容
所有评论(0)