Java 自动将JSON字节从RabbitMQ队列转换为对象
是否可以配置Java 自动将JSON字节从RabbitMQ队列转换为对象,java,json,spring,jackson,spring-amqp,Java,Json,Spring,Jackson,Spring Amqp,是否可以配置springamqp,使其自动将队列中的消息(本质上是JSON字符串)转换为所需类型的对象 到目前为止,我所尝试的: 1) 我的cfg: 2) 我的监听器doublistener有方法listen(FooMessage foo){…} 及 3) 我的FooMessage只是简单的POJO,而我的test_队列中的消息只是FooMessage的JSON格式的序列化实例 所以它不起作用,Spring声称监听(byte[]msg)方法: java.lang.NoSuchMethodEx
springamqp
,使其自动将队列中的消息(本质上是JSON
字符串)转换为所需类型的对象
到目前为止,我所尝试的:
1) 我的cfg:
2) 我的监听器doublistener
有方法listen(FooMessage foo){…}
及
3) 我的FooMessage
只是简单的POJO,而我的test_队列中的消息只是FooMessage
的JSON
格式的序列化实例
所以它不起作用,Spring声称监听(byte[]msg)
方法:
java.lang.NoSuchMethodException:foo.doublistener.listen([B)
可以这样做吗?请阅读有关Jackson2JsonMessageConverter的说明。
请注意以下注意事项:
在1.6之前的版本中,如果类型信息不存在,转换将失败。从1.6版本开始,如果类型信息丢失,转换器将使用Jackson默认值(通常是映射)转换JSON
因此,与POJO处理程序的目标参数类型无关,MessageProperties
必须包含\uuuuuuuuuuuuuuuuuuuuuuuuuu
信息
为满足您的要求,请考虑使用<代码> @ RabBistListor < /C> >
有关Spring AMQP 1.6中的新闻,请参见同一节虽然可以自由地提出A,但是我们可以考虑一些通用的钩子:代码> MasaGelistNeldAdvs/CODE >。因此,可以在转换之前推断目标参数类型。好吧,事实上,这件事在
Spring AMQP
甚至之前的1.6版中都很有魅力。问题在于我的消息的内容类型不正确,它只是文本/普通的
如果带有json
的消息以适当的方式发送,则
template.convertAndSend("test_queue", "test_queue", new FooMessage("blablabla","blabla"));
正确设置模板后
:
<rabbit:template id="amqpTemplate"
connection-factory="rabbitConnectionFactory"
message-converter="jsonMessageConverter"
/>
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>
因此,方法listen(FooMessage foo){…}
是通过消息中类型为FooMessage
的自动创建对象调用的。我是否正确理解,在我的侦听器配置方式中,这是不可能的?因此,问题在于消息的内容类型不正确
<rabbit:template id="amqpTemplate"
connection-factory="rabbitConnectionFactory"
message-converter="jsonMessageConverter"
/>
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>