You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过rest_v2向JasperReport Server正确传递JSON数组类型roles参数

JasperReports Server rest_v2 用户接口roles参数组装方案

roles字段为标准JSON数组类型,数组内每个元素是存储角色属性的JSON对象,针对你使用的org.json工具包,可直接参考以下可运行代码补全逻辑:

方式一:逐元素构造JSON结构

适合角色列表动态生成的场景,手动创建JSONArray存放所有角色对象,逐个构造角色属性后放入数组:

import org.json.JSONArray;
import org.json.JSONObject;

public class JasperUserRequestTest {
    public static void main(String[] args) {
        JSONObject jsonBodyInfo = new JSONObject();
        try {
            jsonBodyInfo.put("fullName", "adm");
            jsonBodyInfo.put("password", "123");
            jsonBodyInfo.put("enabled", true); // 注意补上官方文档要求的enabled字段,旧代码遗漏了该必填项

            // 初始化roles数组容器
            JSONArray rolesArr = new JSONArray();

            // 构造无租户归属的普通用户角色
            JSONObject userRole = new JSONObject();
            userRole.put("name", "ROLE_USER");
            rolesArr.put(userRole);

            // 构造归属organization_1租户的门店管理员角色
            JSONObject storeManagerRole = new JSONObject();
            storeManagerRole.put("name", "ROLE_STOREMANAGER");
            storeManagerRole.put("tenantId", "organization_1");
            rolesArr.put(storeManagerRole);

            // 将组装完成的数组传入请求体
            jsonBodyInfo.put("roles", rolesArr);
            
            // 后续执行接口请求逻辑即可
            System.out.println(jsonBodyInfo.toString());
        } catch (JSONException e) {
            // 禁止空吞异常,打印堆栈方便排查参数构造错误
            e.printStackTrace();
        }
    }
}

运行后生成的请求体和官方要求结构完全一致:

{
  "enabled": true,
  "fullName": "adm",
  "password": "123",
  "roles": [
    {"name": "ROLE_USER"},
    {"name": "ROLE_STOREMANAGER", "tenantId": "organization_1"}
  ]
}

方式二:直接解析固定格式的JSON字符串

如果角色配置固定,可直接传入符合格式的JSON字符串构造JSONArray,减少样板代码:

// 省略其余重复代码
JSONArray rolesArr = new JSONArray("[{\"name\":\"ROLE_USER\"},{\"name\":\"ROLE_STOREMANAGER\",\"tenantId\":\"organization_1\"}]");
jsonBodyInfo.put("roles", rolesArr);

常见失效原因排查

  • 不要直接传入Java原生集合(比如ArrayList<HashMap>)、普通Java对象给roles字段,org.json包不会自动将这类对象序列化为符合要求的JSON数组结构
  • 角色名称大小写敏感,必须和JasperReports Server中已存在的角色名完全匹配,带租户属性的角色必须填写真实存在的tenantId,否则接口会自动过滤无效角色配置
  • 不要遗漏enabled必填字段,部分低版本JasperReports Server在缺失该字段时,会直接忽略传入的roles等扩展属性

内容的提问来源于stack exchange,提问作者Erik Martinez Barraza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:15:48