Spring Boot JMS MappingJackson2MessageConverter找不到`_type`字段,即使它存在

时间:2018-05-20 18:15:04

标签: java spring spring-boot spring-jms

我使用Spring启动来接收JMS消息,使用cURL发送它。

这里是Spring配置:

@Bean
public MessageConverter jsonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    return converter;
}

当我尝试发送消息时,我得到:

org.springframework.jms.support.converter.MessageConversionException: Could not find type id property [_type] on message [ID:b5151b422e8a-41371-1526292561432-6:3:1:1:14] from destination [queue://ssg]

我的cURL命令是:

curl -u 'un:pw' -H '_type: com.me.SSMessage' -d 'body={"_type": "com.me.SSMessage", "url": "https://www.google.com"}' "http://localhost:8161/api/message/ssg?type=queue&clientId=consumerA"

_type已设置,既可以作为标题(我不认为这是正确的),也可以作为JSON中的字段。为什么我从Spring应用程序中得到错误?

1 个答案:

答案 0 :(得分:0)

这比Spring更像是一个Activemq / REST问题:

converter.setTypeIdPropertyName("_type");

这设置了JMS Message属性,它不是消息中的字段。有关邮件标题的内容如下:https://docs.oracle.com/javaee/7/api/javax/jms/Message.html

诀窍是如何使用Activemq REST接口(以及CURL)执行此操作。答案是将其添加为查询的GET参数:

curl -u 'un:pw' -H '_type: com.me.SSMessage' \
-d 'body={"url": "https://www.google.com"}' \ 
"http://localhost:8161/api/message/ssg? \ 
type=queue&clientId=consumerA&_type=com.me.SSMessage"