
简介本资源为 Drools 规则引擎 7.48.0 Final 官方发行版完整分发包面向 Java 开发者、企业级规则系统设计人员及微服务架构中需嵌入业务规则能力的中高级工程师。该版本属于 Drools 7.x 系列稳定终版适用于复杂事件处理CEP、决策表建模、规则热部署等典型场景可支撑风控策略、保险核保、订单路由等业务逻辑的解耦与动态化管理。压缩包为 ZIP 格式大小 64.01MB包含完整的二进制库、示例工程、文档及脚本工具核心文件类型涵盖 JAR运行时依赖与 API、XML规则定义与配置、JAVADOCAPI 参考及 Shell/BAT 启动脚本结构规范开箱即用。目前已有 309 人学习下载读者可直接获取标准发行版用于本地集成验证、规则调试环境搭建或与 Spring Boot/Kie Server 的对接实践避免因版本不一致导致的兼容性问题。1. Drools 7.48.0.Final 安装不是“解压即用”版本错一档规则引擎就直接哑火你手头刚下载完drools-distribution-7.48.0.Final.zip双击解压、翻到bin/下兴冲冲执行kieserver-start.sh——结果控制台刷出一长串NoClassDefFoundError最后卡在org.kie.api.KieServices找不到。这不是你的 JDK 没配好也不是环境变量漏写了而是 Drools 7.48.0.Final 这个版本对 Java 和 Maven 的兼容边界非常具体它强制要求 JDK 11仅支持 11.0.2不兼容 JDK 17且 Maven 3.8.6而网上大量教程还在沿用 JDK 8 Maven 3.5 的老路径。一旦版本越界kie-server 启动失败、DRL 文件加载报空指针、甚至 KIE Workbench 页面白屏——这些都不是配置问题是底层字节码签名和模块系统不匹配导致的硬性拒绝。这套环境特别适合正在做企业级规则中心迁移、需要稳定支撑复杂决策流比如信贷审批链、保险核保策略树的后端开发者也适合某高校实验室在构建可解释 AI 决策沙箱时需要一个开箱即用、规则热更新可控、且能与 Spring Boot 2.5.x 深度集成的规则引擎底座。别急着改配置先锁死 JDK 和 Maven 版本这是 Drools 7.48.0.Final 能跑起来的第一道生死线。2. 环境筑基JDK 11 与 Maven 3.8.6 的精准安装与验证Drools 7.48.0.Final 不是泛兼容型工具它对运行时环境有明确的语义版本契约。JDK 必须是11.0.2 或更高小版本如 11.0.22但绝对不能是 JDK 12 及以上Maven 必须是3.8.6 或 3.8.73.9.x 已移除部分 Drools 构建插件依赖的内部 API。这两个组件若没踩准后续所有配置都是空中楼阁。2.1 安装 JDK 11只认 OpenJDK 11.0.22 LTS拒绝 Oracle JDK 11u21我们不推荐从 Oracle 官网下载带商业许可风险的 JDK也不建议用某些 Linux 发行版仓库里打包陈旧的openjdk-11-jdkUbuntu 20.04 默认是 11.0.11CentOS 7 是 11.0.19。实测最稳路径是直接获取 Adoptium Temurin 11.0.227 的二进制包# 下载并解压以 Linux x64 为例 wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz tar -xzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz -C /opt/ sudo ln -sf /opt/jdk-11.0.227 /opt/java11提示/opt/java11是我们约定的 JDK 根路径后续所有环境变量、Drools 启动脚本都基于此。不要用update-alternatives或修改/usr/bin/javaDrools 启动脚本会主动读取JAVA_HOME混用会导致kieserver-start.sh内部调用的java -version与实际JAVA_HOME不一致。验证是否真正生效export JAVA_HOME/opt/java11 export PATH$JAVA_HOME/bin:$PATH java -version # ✅ 正确输出应为 # openjdk version 11.0.22 2024-01-16 # OpenJDK Runtime Environment Temurin-11.0.227 (build 11.0.227) # OpenJDK 64-Bit Server VM Temurin-11.0.227 (build 11.0.227, mixed mode)关键点说明java -version输出中必须含11.0.22字样且 build 号为7若显示11.0.21或11.0.19说明你解压错了包或JAVA_HOME指向了旧版本若出现Error: Could not create the Java Virtual Machine大概率是系统架构不匹配如在 ARM64 机器上用了 x64 包需重下对应平台二进制。2.2 安装 Maven 3.8.7必须禁用默认仓库镜像否则 KIE 构建必挂Drools 7.48.0.Final 的构建过程重度依赖org.kie:kie-maven-plugin该插件在 Maven 3.8.6 中被重构但其依赖的maven-resolver组件与国内某些镜像站如阿里云、华为云返回的元数据格式存在解析冲突会导致mvn clean install卡在Downloading from aliyun: https://maven.aliyun.com/repository/public/org/kie/kie-maven-plugin/maven-metadata.xml并最终超时失败。正确做法是使用官方二进制 自定义settings.xml强制直连中央仓库# 下载 Maven 3.8.7 wget https://dlcdn.apache.org/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz tar -xzf apache-maven-3.8.7-bin.tar.gz -C /opt/ sudo ln -sf /opt/apache-maven-3.8.7 /opt/maven387 # 创建专用 settings.xml绕过所有镜像 mkdir -p ~/.m2 cat ~/.m2/settings.xml EOF ?xml version1.0 encodingUTF-8? settings xmlnshttp://maven.apache.org/SETTINGS/1.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd localRepository/home/$(whoami)/.m2/repository/localRepository mirrors !-- ⚠️ 关键注释掉所有 mirror 配置强制走 central -- /mirrors profiles profile idcentral-only/id repositories repository idcentral/id urlhttps://repo.maven.apache.org/maven2/url releasesenabledtrue/enabled/releases snapshotsenabledfalse/enabled/snapshots /repository /repositories /profile /profiles activeProfiles activeProfilecentral-only/activeProfile /activeProfiles /settings EOF然后设置环境变量export MAVEN_HOME/opt/maven387 export PATH$MAVEN_HOME/bin:$PATH mvn -v # ✅ 正确输出应为 # Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946181e3090e9ed77fd) # Maven home: /opt/maven387 # Java version: 11.0.22, vendor: Eclipse Adoptium, runtime: /opt/java11参数说明settings.xml中mirrors块完全留空是绕过镜像污染的最简方案activeProfiles显式激活central-only确保任何子项目都不会意外继承公司私有镜像localRepository路径用$(whoami)动态生成避免多用户环境冲突。2.3 验证组合有效性用 Drools 自带的 quickstart 测试闭环光看java -version和mvn -v成功还不够。我们必须用 Drools 官方提供的最小验证单元——drools-distribution-7.48.0.Final/examples/quickstarts/hello-world——跑通一次完整生命周期# 解压 drools-distribution-7.48.0.Final.zip 到 /opt/drools-748 unzip drools-distribution-7.48.0.Final.zip -d /opt/ cd /opt/drools-748/examples/quickstarts/hello-world # 清理旧构建、强制用指定 Maven Java export JAVA_HOME/opt/java11 export MAVEN_HOME/opt/maven387 $MAVEN_HOME/bin/mvn clean compile exec:java预期输出末尾应包含INFO Hello World INFO Goodbye若出现Could not resolve dependencies for project org.drools:hello-world:jar:7.48.0.Final说明 Maven 仍试图从错误镜像拉包若报Unsupported class file major version 61说明JAVA_HOME指向了 JDK 17若卡在Building KieBase...无响应则可能是kie-api与kie-internal版本不匹配——这通常源于你手动修改过pom.xml里的drools.version而 7.48.0.Final 要求所有 KIE 子模块版本严格统一为7.48.0.Final不可降级或升级。3. 解压即启动KIE Server 7.48.0.Final 的容器化部署与 WAR 包定制drools-distribution-7.48.0.Final.zip的核心价值不在示例代码而在kie-server-7.48.0.Final-ee7.war这个企业级规则服务 WAR 包。它不是 Tomcat 插件而是设计为部署在 WildFly 26.1.0.FinalEE8 兼容上的原生应用。强行丢进 Tomcat 9/10 会因 CDI、JAX-RS 实现差异直接启动失败。3.1 部署 WildFly 26.1.0.Final必须用 EE7 Profile禁用 Jakarta EE 9 命名空间Drools 7.48.0.Final 的 KIE Server 仍基于 Java EE 7 规范javax.*包而 WildFly 27 默认启用 Jakarta EE 9jakarta.*包。因此必须锁定 WildFly 26.1.0.Final并显式启用standalone-ee7.xml配置文件# 下载 WildFly 26.1.0.Final注意不是 26.0.0 或 26.1.1 wget https://github.com/wildfly/wildfly/releases/download/26.1.0.Final/wildfly-26.1.0.Final.zip unzip wildfly-26.1.0.Final.zip -d /opt/ sudo ln -sf /opt/wildfly-26.1.0.Final /opt/wildfly26 # 复制 KIE Server WAR 到部署目录 cp /opt/drools-748/kie-server-distribution/kie-server-7.48.0.Final-ee7.war /opt/wildfly26/standalone/deployments/ # 启动时指定 EE7 profile /opt/wildfly26/bin/standalone.sh -c standalone-ee7.xml -b 0.0.0.0 -bmanagement 0.0.0.0启动成功标志日志末尾出现WFLYSRV0010: Deployed kie-server-7.48.0.Final-ee7.war (runtime-name : kie-server-7.48.0.Final-ee7.war) WFLYUT0021: Registered web context: /kie-server for server default-server此时访问http://localhost:8080/kie-server/services/rest/server/应返回 XML 格式的服务器状态需 Basic Auth用户名/密码默认为kieserver/kieserver1!。3.2 WAR 包瘦身移除冗余模块避免 ClassLoader 冲突kie-server-7.48.0.Final-ee7.war默认包含全部可选功能BRMS UI、OptaPlanner 集成、jBPM 流程引擎但如果你只用规则执行服务REST/Java Client 调用 DRL这些模块不仅增大包体积120MB还会在 WildFly 的模块类加载器中引发LinkageError。实测可安全移除路径说明移除后影响WEB-INF/lib/kie-server-controller*-7.48.0.Final.jar控制台管理模块无法通过/controller访问 Web UI但 REST API 不受影响WEB-INF/lib/jbpm*-7.48.0.Final.jarjBPM 流程引擎依赖无法部署 BPMN 流程纯 DRL 规则不受限WEB-INF/lib/optaplanner*-7.48.0.Final.jarOptaPlanner 集成无法在规则中调用SolverManager不影响KieSession.fireAllRules()操作命令在解压后的 WAR 目录内执行cd /tmp/kie-server-unpacked zip -d kie-server-7.48.0.Final-ee7.war \ WEB-INF/lib/kie-server-controller*-7.48.0.Final.jar \ WEB-INF/lib/jbpm*-7.48.0.Final.jar \ WEB-INF/lib/optaplanner*-7.48.0.Final.jar # 重新压缩为标准 WAR zip -r /opt/wildfly26/standalone/deployments/kie-server-7.48.0.Final-ee7.war .注意zip -d删除后必须用zip -r重新归档不能直接cp回部署目录WildFly 会校验 WAR 的META-INF/MANIFEST.MF时间戳。3.3 配置 KIE Server 数据源连接 PostgreSQL 13 而非 H2默认 KIE Server 使用嵌入式 H2 数据库存储容器KieContainer、扫描任务Scanner等元数据但 H2 在生产环境无法支撑高并发规则查询。必须切换为 PostgreSQL13.10 或 14.7将postgresql-42.5.4.jar放入/opt/wildfly26/modules/system/layers/base/org/postgresql/main/创建对应目录结构编辑/opt/wildfly26/modules/system/layers/base/org/postgresql/main/module.xml?xml version1.0 encodingUTF-8? module xmlnsurn:jboss:module:1.9 nameorg.postgresql resources resource-root pathpostgresql-42.5.4.jar/ /resources dependencies module namejavax.api/ module namejavax.transaction.api/ /dependencies /module修改/opt/wildfly26/standalone/configuration/standalone-ee7.xml在datasources节点内添加datasource jndi-namejava:jboss/datasources/KieServerDS pool-nameKieServerDS enabledtrue use-java-contexttrue connection-urljdbc:postgresql://localhost:5432/kieserver?currentSchemapublic/connection-url driverpostgresql/driver security user-namekieserver/user-name passwordkieserver123/password /security /datasource在 PostgreSQL 中建库建用户CREATE DATABASE kieserver ENCODING UTF8 LC_COLLATEen_US.UTF-8 LC_CTYPEen_US.UTF-8; CREATE USER kieserver WITH PASSWORD kieserver123; GRANT ALL PRIVILEGES ON DATABASE kieserver TO kieserver; -- 执行 KIE Server 提供的 DDL路径/opt/drools-748/kie-server-distribution/sql-scripts/postgresql-kieserver-ds.sql \c kieserver \i /opt/drools-748/kie-server-distribution/sql-scripts/postgresql-kieserver-ds.sql重启 WildFly 后日志中应出现KieServerDS初始化成功的提示且http://localhost:8080/kie-server/services/rest/server/containers返回的 JSON 中status为SUCCESS。4. 规则工程落地DRL 文件编写、KieContainer 构建与热更新实战KIE Server 的核心能力是让业务规则脱离代码编译周期。但drools-distribution-7.48.0.Final的规则热更新机制有隐性约束DRL 文件必须放在src/main/resources下且 KieContainer 的 GAVGroupId:ArtifactId:Version必须全局唯一否则POST /containers/{id}会静默失败。4.1 编写符合 7.48.0.Final 语法的 DRL避开已废弃的 accumulate 函数Drools 7.48.0.Final 中accumulate函数的语法已变更旧写法accumulate($p : Person(), $sum : sum($p.age))会触发ParseException。新规范要求显式声明init,action,result块// ✅ 正确写法src/main/resources/rules/credit-rules.drl package com.example.credit import java.math.BigDecimal; dialect java rule High Income Approval when $app : Application( income 50000 ) then $app.setApproved(true); $app.setLimit(new BigDecimal(100000)); end rule Calculate Risk Score when $app : Application() $score : Number(intValue 0) from accumulate( $t : Transaction( amount 1000 ), init( int total 0; ), action( total $t.amount.intValue(); ), result( new Integer(total) ) ) then $app.setRiskScore($score.intValue()); end关键点dialect java必须显式声明否则 lambda 表达式解析失败accumulate的init/action/result三段式不可省略sum()等快捷函数已被移除Application类必须在kie-server的 classpath 中即打包进 KJAR不能是远程类加载。4.2 构建 KJAR用 kie-maven-plugin 7.48.0.Final 生成可部署包KJARKie JAR不是普通 JAR它必须包含META-INF/kmodule.xml和src/main/resources/下的 DRL。pom.xml必须严格遵循以下结构?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIdcredit-kjar/artifactId version1.0.0-SNAPSHOT/version packagingkjar/packaging !-- ⚠️ 必须是 kjar -- properties drools.version7.48.0.Final/drools.version /properties dependencies dependency groupIdorg.kie/groupId artifactIdkie-api/artifactId version${drools.version}/version /dependency /dependencies build plugins plugin groupIdorg.kie/groupId artifactIdkie-maven-plugin/artifactId version${drools.version}/version extensionstrue/extensions /plugin /plugins /build /project构建命令cd /path/to/credit-kjar mvn clean install -DskipTests # 生成 target/credit-kjar-1.0.0-SNAPSHOT.jar即 KJAR注意packagingkjar/packaging是 kie-maven-plugin 识别构建目标的关键写成jar会导致kmodule.xml不被处理KIE Server 部署时提示No kbase found。4.3 部署与热更新用 REST API 创建容器并推送新规则KJAR 构建完成后通过 KIE Server REST API 部署为容器Container# 创建容器POST curl -X POST http://localhost:8080/kie-server/services/rest/server/containers/credit-v1 \ -H Content-Type: application/json \ -H Authorization: Basic a2llc2VydmVyOmtpZXNlcnZlcjEh \ -d { container-id : credit-v1, release-id : { group-id : com.example, artifact-id : credit-kjar, version : 1.0.0-SNAPSHOT }, resolved-release-id : { group-id : com.example, artifact-id : credit-kjar, version : 1.0.0-SNAPSHOT } } # 验证容器状态 curl -X GET http://localhost:8080/kie-server/services/rest/server/containers/credit-v1 \ -H Authorization: Basic a2llc2VydmVyOmtpZXNlcnZlcjEh # ✅ 返回 status:SUCCESS 且 container-id:credit-v1热更新流程修改 DRL 后重新部署修改credit-kjar/src/main/resources/rules/credit-rules.drlmvn clean install生成新版本 KJAR如1.0.1-SNAPSHOT调用PUT /containers/credit-v1推送新 Release IDcurl -X PUT http://localhost:8080/kie-server/services/rest/server/containers/credit-v1 \ -H Content-Type: application/json \ -H Authorization: Basic a2llc2VydmVyOmtpZXNlcnZlcjEh \ -d { release-id: { group-id: com.example, artifact-id: credit-kjar, version: 1.0.1-SNAPSHOT } }提示KIE Server 会自动卸载旧 KieBase、加载新规则无需重启 WildFly。但若 DRL 语法错误API 返回400 Bad Request且日志中会打印具体解析失败位置如line 15 column 22这是比 IDE 报错更准的调试依据。5. 避坑指南Drools 7.48.0.Final 最常踩的 5 个深坑与血泪解法Drools 7.48.0.Final 的文档和社区讨论常滞后于实际行为很多“看似合理”的操作会导致服务静默失效。以下是我在某跨平台系统规则中心迁移中亲历的 5 个高频翻车点每一条都附带现象、根因和可立即执行的解法。5.1 现象KIE Server 启动成功但GET /server/containers返回空数组且日志无报错原因WildFly 的standalone-ee7.xml中未启用org.kie.serversubsystem。Drools 7.48.0.Final 的 KIE Server WAR 依赖此 subsystem 提供的KieServerImpl服务若 subsystem 缺失WAR 会部署成功但无法注册容器。解法编辑/opt/wildfly26/standalone/configuration/standalone-ee7.xml在extensions节点末尾添加extension moduleorg.kie.server/并在profile的subsystem xmlnsurn:jboss:domain:ee:4.0后插入subsystem xmlnsurn:jboss:domain:kieserver:2.0 providers provider nameKieServer classorg.kie.server.remote.rest.common.KieServerRestImpl/ /providers /subsystem重启 WildFly 后日志中应出现KieServerSubsystemParser: Started KIE Server subsystem。5.2 现象POST /containers/{id}返回201 Created但GET /containers/{id}/status显示UNINITIALIZED原因KJAR 的pom.xml中version使用了1.0.0-SNAPSHOT而 KIE Server 默认禁用 SNAPSHOT 版本部署出于生产安全考虑。解法在 WildFly 启动参数中添加-Dorg.kie.server.allow.snapshottrue/opt/wildfly26/bin/standalone.sh -c standalone-ee7.xml -b 0.0.0.0 \ -Dorg.kie.server.allow.snapshottrue或在standalone-ee7.xml的system-properties中添加property nameorg.kie.server.allow.snapshot valuetrue/5.3 现象规则能加载但fireAllRules()不触发任何 rule且KieSession.getFactCount()返回 0原因DRL 文件中rule块未声明salience或no-loop true而事实对象Fact在插入时被 KIE Server 的默认KieSession配置StatelessKieSession忽略。7.48.0.Final 默认创建的是StatelessKieSession它不维护事实生命周期。解法在kmodule.xml中显式声明KieBase类型为statefulkmodule xmlnshttp://www.drools.org/xsd/kmodule kbase namecredit-kbase packagesrules defaulttrue eventProcessingModecloud ksession namecredit-session typestateful defaulttrue/ /kbase /kmodule并确保 KJAR 的src/main/resources/META-INF/kmodule.xml被正确打包。5.4 现象调用POST /containers/{id}/execute执行规则时返回500 Internal Server Error日志报java.lang.NoClassDefFoundError: org/kie/api/runtime/RuleRuntime原因客户端请求体中json格式错误。KIE Server 7.48.0.Final 的 REST API 对commands数组的 JSON 结构极其敏感若insert命令的object字段值不是合法 JSON 对象如用了单引号、缺少逗号会触发类加载器异常而非友好的 400 错误。解法严格按官方 schema 构造请求体。例如插入Application对象{ lookup: credit-session, commands: [ { insert: { object: { com.example.Application: { income: 60000, name: Alice } }, out-identifier: app } }, { fire-all-rules: {} } ] }⚠️ 注意com.example.Application是类全限定名不是 JSON keyout-identifier必须与 DRL 中$app : Application()的变量名一致。5.5 现象WildFly 日志反复打印WARN [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (default task-1) Cannot find kjar原因KJAR 的groupId:artifactId:version与POST /containers请求体中的release-id不完全一致包括大小写、连字符。Drools 7.48.0.Final 的 artifact resolution 是严格字符串匹配credit-kjar≠CreditKjar。解法用mvn dependency:tree确认 KJAR 的真实坐标cd /path/to/kjar mvn help:effective-pom | grep -A5 artifactId # 输出必须与 API 请求体中的 group-id/artifact-id/version 完全一致并在pom.xml中统一使用小写字母和短横线避免驼峰命名。6. 验证跑通用 Java Client 调用 KIE Server 并断言规则逻辑正确性装完环境、部署好容器、写好 DRL最终要落到「规则是否真按业务预期执行」。我从不依赖 Postman 点击测试而是写一个极简 Java Client用kie-server-client7.48.0.Final SDK 直接调用并用 JUnit 断言输出。这套验证流程我每次上线前必跑它比任何日志检查都可靠。6.1 编写验证 Client复用 KIE Server 的 client jar避免版本错配drools-distribution-7.48.0.Final.zip的lib/目录下自带kie-server-client-7.48.0.Final.jar它已预编译适配所有 REST 接口。我们直接将其加入 classpath不从 Maven 中拉取避免7.48.0.Final与7.48.0.Final-redhat-00001等变体冲突// VerifyKieServer.java import org.kie.server.client.KieServicesClient; import org.kie.server.client.KieServicesConfiguration; import org.kie.server.client.RuleServicesClient; import org.kie.server.client.model.ServiceResponse; import org.kie.server.client.model.instance.CommandResponse; import org.kie.server.client.model.instance.ExecuteResponse; import org.kie.server.client.model.instance.FactHandleInstance; import java.util.*; import static org.junit.jupiter.api.Assertions.*; public class VerifyKieServer { private static final String URL http://localhost:8080/kie-server/services/rest/server; private static final String USER kieserver; private static final String PASS kieserver1!; public static void main(String[] args) { // 1. 构建 client必须用 distribution 自带的 jar KieServicesConfiguration config KieServicesFactory.newRestConfiguration(URL, USER, PASS); config.setMarshallingFormat(org.kie.server.api.marshalling.MarshallingFormat.JSON); KieServicesClient client KieServicesFactory.newKieServicesClient(config); // 2. 获取 RuleServicesClient RuleServicesClient ruleClient client.getServicesClient(RuleServicesClient.class); // 3. 构建 Application 事实对象必须与 DRL 中 import 的类一致 MapString, Object app new HashMap(); app.put(income, 55000); // 触发 High Income Approval 规则 app.put(name, Bob); // 4. 执行规则 ServiceResponseExecuteResponse response ruleClient.executeCommandsWithResults( credit-v1, [\n {\n \insert\: {\n \object\: {\n \com.example.Application\: app \n },\n \out-identifier\: \app\\n }\n },\n {\n \fire-all-rules\: {}\n }\n ] ); // 5. 断言结果 assertTrue(response.getType() ServiceResponse.ResponseType.SUCCESS, KIE Server returned error: response.getMsg()); ExecuteResponse executeResponse response.getResult(); ListCommandResponse results executeResponse.getResults(); // 查找名为 app 的插入结果 OptionalCommandResponse appResult results.stream() .filter(r - app.equals(r.getId())) .findFirst(); assertTrue(appResult.isPresent(), Fact app not found in response); // 解析返回的 Application 对象 MapString, Object returnedApp (MapString, Object) appResult.get().getResult(); Boolean approved (Boolean) returnedApp.get(approved); Object limit returnedApp.get(limit); assertTrue(approved, Rule High Income Approval did not fire); assertNotNull(limit, Limit field was not set by rule); assertEquals(100000, limit.toString(), Limit value mismatch p a hrefhttps://download.csdn.net/download/aqqabqqb/14928955 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p