将来自RabbitMQ的消息转换为string/json

Mat*_*aug 7 java spring json amqp rabbitmq

我目前正在努力解决一个公平的问题.我想从RabbitMQ收到一条消息,并将其转换为字符串(或稍后的json对象).但我得到的只是字节数.

消息对象显示本身作为一个字符串,方式

(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
Run Code Online (Sandbox Code Playgroud)

配置类(使用弹簧)

@Configuration
public class RabbitConfiguration {

    @Bean
    public CachingConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory("www.example.com");
        connectionFactory.setUsername("xxxx");
        connectionFactory.setPassword("xxxx");
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter(){
        JsonMessageConverter jsonMessageConverter = new JsonMessageConverter();
        return jsonMessageConverter;
    }

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer(){
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
        container.setAutoStartup(false);
        container.setQueues(indexQueue());
        container.setConcurrentConsumers(1);
        container.setAcknowledgeMode(AcknowledgeMode.AUTO);
        container.setMessageListener(new MessageListenerAdapter(pageListener(), jsonMessageConverter()));
        return container;
    }

    @Bean
    public Queue indexQueue(){
        return new Queue("pages.type.index");
    }

    @Bean
    public MessageListener pageListener(){
        return new PageQueueListener();
    }

}
Run Code Online (Sandbox Code Playgroud)

和消息监听器

public class PageQueueListener implements MessageListener {

    public void onMessage(Message message) {
        System.out.println(message);
        System.out.println(message.getBody());
    }
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是,getBody()方法显示[B @ 4dbb73b0所以没有任何转换.既不是字符串也不是json对象:(

我觉得很蠢,但我在这里找不到解决办法

sli*_*lim 16

message.getBody() 返回一个 byte[]

尝试:

byte[] body = message.getBody();
System.out.println(new String(body));
Run Code Online (Sandbox Code Playgroud)

  • 你正在开玩笑吧......那很有用,但是MessageConverter怎么样,什么都不做呢? (4认同)
  • 另外,如果您查看org.springframework.amqp.core.Message的源代码,您会发现带有签名私有字符串getBodyContentAsString()的方法,该方法如下所示:return new String(body,ENCODING) ;`...因此也应足够:`System.out.println(new String(message.getBody(),Charset.defaultCharset()。name()))` (2认同)