Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动将JSON字节从RabbitMQ队列转换为对象_Java_Json_Spring_Jackson_Spring Amqp - Fatal编程技术网

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"/>