我有三个单独的消息有效负载:
"id": "1234"
"type": "space-crite"
"attributes": {
"ferocity": 10,
"appetite": 10,
"cuddliness": 0
}
我想使用Spring Cloud Stream aggregator app starter处理器将这三个消息有效负载合并为一个:
"id": "1234",
"type": "space-crite",
"attributes": {
"ferocity": 10,
"appetite": 10,
"cuddliness": 0
}
通过使用聚合处理器的聚合器。聚合选项。文档指出,此属性的有效值是聚合策略的SpEL表达式,默认情况下,它会生成有效负载的集合。聚合器处理器的一个集成测试使用以下表达式:
#this.?[payload == 'foo'].![payload]
从单独的有效载荷“foo”和“bar”生成聚合消息“foo”。虽然测试非常有用,但文档中没有提供太多关于如何在Spring Cloud Stream Starter应用程序的上下文中使用SpEL表达式的示例,这很遗憾,因为我知道我错过了一个非常强大的功能。
使用如下所示的表达式:
#this
作为聚合器的值。聚合属性创建一个负载,该负载是GenericMessage对象的集合,每个对象都有自己的负载和标头属性。我希望创建一个大小为1的GenericMessage,其有效负载属性包含3条传入消息。
有人能给我一些关于如何在这个处理器选项中使用SpEL表达式的例子吗?我正在尝试的是可能的吗?
假设有效载荷是字符串...
尝试get(0). payload get(1). payload get(2). payload
。
如果要在有效载荷之间换行,请使用
T(String).format(get(0).payload + '%n' + get(1).payload + '%n' + get(2).payload)
编辑
不幸的是,聚合的#root
对象是Collection
您可以用新java替换每个元素。util。ArrayList(#根)。获取(0)。负载等,但这相当难看(而且效率很低,因为您创建了一个新列表来获取每个元素)。我看看能不能想出更好的解决办法。
编辑2
也许这会接近你想要的。。。
#root.![payload].toString()
测试:
MessageGroup g = new SimpleMessageGroup("foo");
g.add(new GenericMessage<>("foo"));
g.add(new GenericMessage<>("bar"));
Collection<Message<?>> messages = g.getMessages();
Expression e = new SpelExpressionParser().parseExpression(
"#root.![payload].toString()");
System.out.println(e.getValue(messages));
生产
[foo, bar]
要移除牙套:
#root.![payload].toString().replaceAll('[\[\]]', '')
(只要JSON中没有
[],在您的示例中就是这样)。
问题 如何在groovy Spring Boot项目中定义Spring表达式语言(SpEL)?(每个Spring调度器crontab@调度注释) Spring Boot Groovy和Spring EL调度器 根据来自web的文档,我正在groovy spring boot应用程序(2.2.x)中使用spring scheduler 根据这篇文章:任务调度使用cron表达式从属性文件 试过这个 我
我们有几个域对象具有可为空的字段。我们已经读到hibernate需要“raw”对象来正确映射它,所以我们的getter返回optionals。我们的域对象如下所示: 但现在我们在解决/绑定这些字段时遇到了问题。jspx文件。(显示和表单输入字段。)对于基本类型和字符串,我们可以通过定义自定义OptionalToStringConverter绕过这一点。 对其他域对象的可空引用仍然是一个问题。 我们
主要内容:示例,SpEL对Bean定义的支持,SpEL中的运算符,SpEL中的变量Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。 Java 有许多可用的表达式语言,例如 JSP EL,OGNL,MVEL 和 JBoss EL,SpEL 语法类似于 JSP EL,功能类似于 Struts2 中的 OGNL,能在运行时构建复杂表达式、存取
问题内容: 我有以下Transact-Sql,我正尝试将其转换为LINQ …并正在挣扎。 任何帮助将不胜感激…如果可能的话,我想使用Lambda表达式来做。 提前致谢! 问题答案: GFrizzle击败了我。但是这是一个C#版本 作为奖励,还有纯LINQ方法链版本:
6.3 使用SpEL的接口进行表达式求值 本节介绍SpEL接口及其表达式语言的简单使用方法。完整的语言文档见:Language Reference 下面代码介绍了使用SpEL API来解析字符串表达式’Hello World’的示例 ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parse