数据中台
接口安全
认证
通讯安全
规则执行
通用组件
通知器
标准化字段校验
定时器
HTTP调用
Rabbit消息发布
脚本可用JAVA库
【必读】上下文
本文档使用 MrDoc 发布
-
+
首页
【必读】上下文
# 叙述 上下文是规则编排中用到的各组件之间`传值`以及设置`最终返回结果`的对象。 ## 代码定义 ```java public class SceneContext { /** * 请求源数据 */ @Getter private final JsonNode requestData; /** * 执行结果 */ private volatile Object result; public void setResult(Object result) { this.result = result; } public <T> T getResult() { //noinspection unchecked return (T) result; } public void addResult(Object v) { if (this.result != null && !(this.result instanceof List)) { throw new RuntimeException("result已经有值,但它不是list,不能调用addResult"); } if (this.result == null) { synchronized (this) { if (this.result == null) { this.result = Collections.synchronizedList(new ArrayList<>()); } } } //noinspection unchecked ((List) result).add(v); } public void putResult(String key, Object value) { if (this.result != null && !(this.result instanceof Map)) { throw new RuntimeException("result已经有值,但它不是map,不能调用putResult"); } if (this.result == null) { synchronized (this) { if (this.result == null) { this.result = new ConcurrentHashMap<>(); } } } //noinspection unchecked ((Map) result).put(key, value); } public <T> T getResult(String key) { if (this.result == null) { return null; } if (!(this.result instanceof Map)) { throw new RuntimeException("result已经有值,但它不是map,不能调用getResult"); } //noinspection unchecked return (T) ((Map) result).get(key); } private final Map<String, Object> data = new ConcurrentHashMap<>(); public SceneContext(Object requestData) { if (requestData == null) { this.requestData = null; } else if (requestData instanceof JsonNode) { this.requestData = (JsonNode) requestData; } else { this.requestData = SpringContextHolder.getBean(ObjectMapper.class).convertValue(requestData, JsonNode.class); } } public void put(String key, Object value) { data.put(key, value); } public <T> T get(String key) { return (T) data.get(key); } } ``` ## 获取 上下文对象需要在组件中通过`getFirstContextBean()`或 `getContextBean(SceneContext.class)`获取 ```java var context = getContextBean(SceneContext.class); var context = getFirstContextBean(); ``` ## 传值 传值方法 * `get(String key)` * `put(String key,Object v)` ## 最终返回结果 在上下文对象定义中的字段`result`就是最中的执行结果,该结果由组件来赋值。 赋值方法有三种: * `setResult(Object o)` 直接result为给定的值 * `addResult(Object o)` 会判断result是否为list,如果非list将抛出异常,否则将值增加到list中(为null时自动声明一个线程安全的list) * `putResult(String key,Object o)` 会判断result是否为map,如果非map将抛出一次,否则将值增加到map中(为null时自动声明一个线程安全的map) 获取result值: * `getResult()` 获取result字段值 * `getResult(String key)` result必须是map,否则报错
admin
2025年9月1日 13:38
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码