没有发现转换器将有效载荷类型转换为预期的有效载荷类型[byte []]

时间:2016-08-30 20:39:09

标签: spring spring-jms stomp stompjs

我有一个使用Stomp.js的Stomp Over WebSocket客户端,它将消息发送到队列:

var destinationProductProd_02 = "jms.queue.shat";
function sendMessageProduct() {

    var product = {
      productId : "111",
      name : "laptop",
      quantity: 2
    }

    var beforeSend = JSON.stringify(product);
    console.log("typeof message: "+ typeof beforeSend);   // <<--- String
    stompClient.send(destinationProductProd_02, {}, beforeSend);

}

在服务器端我有

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

    factory.setConnectionFactory(connectionFactory);
    factory.setConcurrency("3-10");

    SimpleMessageConverter s = new SimpleMessageConverter();
    factory.setMessageConverter(s);

    return factory;
}

SimpleMessageConverter是使用Spring的默认转换器。 我的listerner是下一个:

@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = ORDER_QUEUE)
public void receiveMessage(Session ses, @Payload final Message message, @Headers final Map<String, Object> headers)  {
    System.out.println("MessageReceiver::receiveMessage(product)   payload class:  "+ message.getPayload().getClass());
}

message.getPayload().getClass()表示有效负载类型是字节数组([B)

为什么我在发送文本时收到二进制数组?

或者如何将此字节数组转换为Java对象。 如果我将JSON和序列化Java对象发送到同一队列会发生什么...如何在同一队列中管理两种不同类型的消息?我想用一些像:

public void receiveMessage(@Payload final Message<Product> message){...}

产品是POJO类

0 个答案:

没有答案