小编的SpringBoot版本:2.2.13.RELEASE
根据实践,官方给的最新依赖2.3.2,在我的这个springboot版本测试中,并不好用!在API数据解析的时候会报错:
java
o.j.m.j.c.i.JimuGlobalExceptionHandler - [handleException,108] - syntax error, pos 1, line 1, column 2api=http%3A%2F%2F127.0.0.1%3A3790%2Fapi%2Fbase%2Fbase_user%2Fsysmenu&method=1&apiConvert=¶mArray=%5B%5D
com.alibaba.fastjson.JSONException: syntax error, pos 1, line 1, column 2api=http%3A%2F%2F127.0.0.1%3A3790%2Fapi%2Fbase%2Fbase_user%2Fsysmenu&method=1&apiConvert=¶mArray=%5B%5D
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1507)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1393)
目前为止,小编也不知道报错究竟是yml的配置原因还是接口的原因,不过小编猜测是这个依赖包的问题,
可能这个依赖包本身有bug也可能这个依赖不适用于小编的springboot版本。
经过测试:
2.3.2 不能用,创建数据报表会直接报错
2.3.1 不能用,会加载不出来新建数据报表页面
2.3.0.1 可以用
2.1.2 可以用
2.0.0 可以用
1.5.0 可以用
下面是Java SpringBoot配置积木报表的详细过程,以小编的SpringBoot版本为使用案例.
引入依赖:
java
<!-- 积木报表 Spring Boot2 专用 Starter -->
<!-- Source: https://mvnrepository.com/artifact/org.jeecgframework.jimureport/jimureport-spring-boot-starter -->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-spring-boot-starter</artifactId>
<version>2.3.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimubi-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.9</version>
</dependency>
<!--积木报表 中文字体支持(导出PDF/Word需要)-->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-font</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.2</version>
</dependency>
考虑到后续的扩展,所以就把积木报表可能需要的依赖都引入进来了。
依赖引入完成后,积木报表需要自己的一个数据源,说白了,他就是需要查询自己的数据库表,
真实开发中混入项目数据库或者单独创建数据源都可以,小编这里就不单独创建数据源了,直接混入项目的数据库。
下载SQL文件:

由于github打开的比较慢,小编这里提供了下载链接:
https://download.csdn.net/download/weixin_43612593/92870958
小编这里使用数据库的主数据源,所以在主数据源下执行这个SQL文件即可,执行完成以后,刷新数据库表,会多出一些以jimu_为前缀的表,这些都是积木报表的配置表,必须要有。

但这些全部完成以后,就可以启动我们的Java程序了,积木报表会跟随者Java程序的启动,一起运行起来。
当启动控制台出现过这个了,就说明Java程序中配置的积木报表启动成功了。

访问地址是后端运行IP + 端口号 + /jmreport/list,像小编的是在本地运行的,所以启动成功以后的访问地址是:http://127.0.0.1:3790/jmreport/list
积木报表无数据库的样子:

积木报表有数据库的样子:

请注意:由于大家的后端不同,可能会出现访问被拦截的情况,大家一定要注意方行积木报表的相关接口哦,不然,不但界面访问不了,积木报表的接口请求都会受限!!!
下面开始测试积木报表的功能,这里小编只做简单的测试,以一个导出Excel表为例,首先,要创建一个返回数据的接口,返回的数据格式是这样的:

注意:不能直接返回列表或数组
创建好接口后,我们进入积木报表的界面,点击新建报表,选择数据报表:

鼠标悬浮左侧上面的加号按钮,选择API数据集:

输入编码,名称,API地址,分页和请求方式根据自己接口的情况进行选择,然后点击解析,解析成功后,点击确定:

如果接口直接返回的是列表或者数组,会解析失败:


然后根据自己的需要,设置好Excel的表头,在左侧的字段列表进行拖拽到对应的单元格中:

然后点击保存,输入文件名,选择好保存的文件夹:

保存好以后,可以点击预览按钮查看Excel的数据映射,看看是否符合接口返回的数据,然后可以导出,地址栏中最后的一串数字是当前创建好的Excel的模板ID,后续如果需要在程序中操作这个模板,都需要这个ID。


在积木报表的首页会显示刚刚创建好的报表模板,点击进去可以重新进入调整模板的界面:

至此,有关Java SpringBoot配置积木报表结束了
结束了吗?
结束了吗?
结束了吗?
结束了吗?
还没有结束,从小编个人来看,积木报表是给我们在做Excel文件,Word文件等提供了一种实现形式,当然,这种形式也很方便,但是在程序中,在真实的开发中,我们大部分的习惯是用户在前端点击某个按钮,来下载所需要的数据,也就是Excel,
用户不会关注你的内部实现怎样,技术多高,只在意能否实现自己想要的结果。
所以小编继续为大家提供一个关于程序操作积木报表实现导出的操作过程。
首先,后端创建一个接口,目的是为了获取积木报表生成Excel的数据:
controller层 ...忽略...
service层 ...忽略...
serviceimpl层:
java
@Override
public Map<String,Object> jimuceshi(Map<String, String> request_map, StringBuilder info) throws IOException {
// 1. 构建积木报表导出参数
List<Map<String, Object>> exportParams = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
params.put("reportId", "1214718833934635008");
params.put("exportType", "excel");
Map<String, Object> queryParam = new HashMap<>();
params.put("queryParam", queryParam);
exportParams.add(params);
// 2. 构建积木报表导出URL
String exportUrl = "http://127.0.0.1:3790/jmreport/exportReport?exportParams=" +
URLEncoder.encode(JSON.toJSONString(exportParams), "UTF-8");
// 3. 调用积木报表接口获取文件二进制数据(Base64编码后返回)
HttpRequest request=HttpRequest.get(exportUrl);
byte[] fileBytes = request.timeout(180000).execute().bodyBytes();
String base64Data = java.util.Base64.getEncoder().encodeToString(fileBytes);
// 5. 返回数据给前端
Map<String,Object> res = new HashMap<>();
res.put("data", base64Data);
res.put("fileName", "报表_" + System.currentTimeMillis() + ".xlsx");
return ResultUtil.Result(res);
}
vue2前端:
java
jimutest(){
let that=this;
let data={mode:"base",table:"base_user",action:"jimuceshi",abc:"abc"}
special.special_util(data).then(rs=>{
if(rs.code=="200"){
// 将 Base64 转为 Blob 并下载
that.downloadFileFromBase64(rs.data.data, rs.data.fileName);
}
});
},
downloadFileFromBase64(base64Data, fileName) {
// 将 Base64 转为 Blob
let byteCharacters = atob(base64Data);
let byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
let blob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
// 创建下载链接
let link = document.createElement('a');
let url = URL.createObjectURL(blob);
link.href = url;
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
},
运行效果:


至此,Java SpringBoot集成积木报表全部结束,以上如有不足之处,欢迎大家留言讨论!