【发布时间】:2016-06-02 00:59:59
【问题描述】:
我有一些 Json 数据作为有效负载,例如:
{
"name" : "Italy"
}
我想用正则表达式过滤我的字段“名称”的内容。
现在我使用了这个过滤器。没有真正的错误,但它不匹配。
<expression-filter expression="regex('^[a-zA-Z]{3,15}$' , 'json:name')" doc:name="Expression"/>
如果我将'(.*)' 作为正则表达式模式,作为使用此 regex() 函数的证明,它可以工作。
<expression-filter expression="regex('(.*)' , 'json:name')" doc:name="Expression"/>
文档是here。
有人理解我的错误吗?
[编辑]
那么 Matthew 的解决方案就是这样工作的:
<set-variable variableName="PayloadBackup" value="#[payload]" doc:name="Variable"/><json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
<expression-transformer expression="#[payload['name'].matches('^[a-zA-Z]{3,15}$')]" doc:name="Expression"/>
<expression-filter expression="#[payload]" doc:name="Expression"/>
<set-payload value="#[PayloadBackup]" doc:name="Set Payload"/>
虽然很丑。
如果字符串与正则表达式不匹配,引擎会回答:
null (java.lang.NullPointerException). Message payload is of type: Boolean
我还不能捕捉到这个异常。
谢谢
【问题讨论】:
-
经过多次尝试,似乎不可能将 json 作为字符串反序列化为 java.lan.Object 或 java.util.List 或任何类型的集合。因此,在这种情况下反序列化 Json 时,不可能使用过滤器注入。如果有人有我感兴趣的想法!