Apache camel 使用ProducerTemplate时自动转换为JSON

Apache camel 使用ProducerTemplate时自动转换为JSON,apache-camel,Apache Camel,我想将包含Java POJO的JMS消息发送到ActiveMQ,所有消息都应该转换为JSON文档。所以我需要将POJO转换为JSON并将创建的文档作为文本消息发送到ActiveMQ的机制。我想使用ProducerTemplate#send(…)方法,而不需要定义路由。我在服务器上使用路由,但在我看来,在客户端这样做是过分的 这是xml配置: <camel:camelContext id="camel-client"> <camel:template id="camelT

我想将包含Java POJO的JMS消息发送到ActiveMQ,所有消息都应该转换为JSON文档。所以我需要将POJO转换为JSON并将创建的文档作为文本消息发送到ActiveMQ的机制。我想使用
ProducerTemplate#send(…)
方法,而不需要定义路由。我在服务器上使用路由,但在我看来,在客户端这样做是过分的

这是xml配置:

<camel:camelContext id="camel-client">
    <camel:template id="camelTemplate" />
    <camel:dataFormats>
        <camel:json id="json" library="Jackson" />
    </camel:dataFormats>        
</camel:camelContext>

当前的实现在
address
上调用
toString()
,但我想自动将其转换为JSON,有可能吗?

据我所知,您正在尝试获取java对象并将其转换为JSON字符串。所以像格森这样的东西会给你带来奇迹

Gson Gson=新的Gson()

字符串地址=gson.toJson(地址)

参考:

在调用ProducerTemplate#send(…)之前,我需要手动将POJO转换为JSON。但我想在ProducerTemplate上注册一种转换器,这样通过ProducerTemplate发送的每一条消息都将转换为json。然后我会调整您的producer模板,将其发送到直接端点,并使用驼峰路由进行封送和发送。是的-我现在正在这样做,但我想确保没有更简单的方法。。。特别是在客户端,我不使用路由-客户端只发送和接收消息,它是一个web应用程序。如果这是客户端,那么值得注意的是producerTemplate组件是一个驼峰库。如果您只是尝试序列化和使用activemq,那么您可以使用通用jms库或资源适配器来不依赖camel库。这其中有一个问题:似乎在2.18.0中,通过将sendBodyAs添加到producerTemplateAPI,它将得到修复
@EndpointInject(uri = "jms:queue:test?jmsMessageType=Text")
private ProducerTemplate camelTemplate;

@Test
public void send() {
    Address address = new Adress("Eric Mouller", "ForstenriederAlle 99", 81476);
    camelTemplate.sendBody(address);
}