我有两个简单的Camel路由,用于写入jms队列并从中读取。我将序列化对象放入队列。我能够将它反序列化并成功地将其转换为json。
写作路线:
from("direct:message").to("jms:myqueu")
我阅读的路线:
from("jms:myqueu")
.marshal()
.json(JsonLibrary.Gson).
.to("file://cc")
现在我想检查对象中的一个字段并根据该字段进行路由。该字段也不应该是最终json的一部分。
我可以根据它检查对象和路由中的值(比如写入不同的文件吗?)。我可以在pojo中添加注释以避免最终json中的字段
我想过将对象转换为json,然后发送到队列。然后我可以使用jsonpath进行条件路由。但是,我如何从最终的json中省略一个字段?
答案 0 :(得分:1)
是的,您可以使用基于内容的路由来检查传入对象中的任何字段,并根据该字段进行路由。
参考:http://camel.apache.org/content-based-router.html
要在json编组期间忽略某个字段,可以使用@JsonIgnore - Jackson注释。
答案 1 :(得分:0)
作为参考,我能够让它运作起来。我添加了一个自定义过滤器类并检查其中的bean值。还在选择选项中将其链接到路由。 我的路线现在是:
from("jms:myqueu")
.choice()
.when()
.method(Exp.class,"checkfieldA")
.json(JsonLibrary.Gson).
.to("file://cc")
.when()
.method(Exp.class,"checkfieldB")
.json(JsonLibrary.Gson).
.to("file://dd")
.endChoice()
这里Exp是一个普通类,checkfieldA和checkfieldB是两个返回布尔值的方法。
class Exp{
public boolean checkfieldA(Message message){
myobj obj = (myobj)message.getBody() // this is the object is put to queue. Need to cast to my object type .
if(myobj.isFieldA()){
return true;
}
}
}