我是流口水的新手。 我想在RHS中检查POJO中是否存在字段。
{
"category": [
{
"nlp": [
{
"mainCategory": "Politics"
}
],
"crawler": [
{
"isNLP": true,
"mainCategory": "Politics"
}
]
}
]
}
这是生成的pojo列表
EsRootDoc是主要的类,它有方法和字段.when
$RHSmap1:EsRootDoc()
and
$map1:EsRootDoc($categorylist1:category)
$category2:Category($nlplist2:nlp) from $categorylist1
$nlp2:Nlp(mainCategory=="politics") from $nlplist2
then
$RHSmap1.setEvent("fight");
end`
这给了我以下错误
[错误:无法使用strict-mode解析方法:com.orkash.EnrichmentService.EnrichmentController.tempJsonToClass.EsRootDoc.setEvent(java.lang.String)] [近:{... $ RHSmap1.setEvent(" fight"); ....}]
我需要提供RHS检查: - 如果 EsRootDoc 有事件字段
答案 0 :(得分:1)
Drools中没有任何东西(据我所知)可以让你做你想要的。规则的RHS是 - 几乎纯粹的Java。那么基本规则是:如果它不能用Java完成,那就不能在Drools中的规则的RHS中完成。
好消息是,您尝试做的事情可以通过反射在Java中实现。我建议您创建一个帮助器类,如果该属性存在,则使用反射来设置对象中属性的值。那么您的规则将如下所示:
rule 'Some Rule'
when
$RHSmap1:EsRootDoc()
$map1:EsRootDoc($categorylist1:category)
$category2:Category($nlplist2:nlp) from $categorylist1
$nlp2:Nlp(mainCategory=="politics") from $nlplist2
then
Helper.setAttribute($RHSmap1, "event", "fight");
end
希望它有所帮助,