首页 > 解决方案 > SimpleMessageConverter 将 ConcurrentHashMap 转换为 HashMap

问题描述

我创建了一条带有 concurrenthashmap 有效负载的集成消息,如下所示

return MessageBuilder.createMessage(emvMessage.getResponse(), headers);

emvMessage.getResponse() 方法返回的位置

public ConcurrentHashMap<String, Object> getResponse() {
 ...
}

到目前为止,一切都很好。但是当我尝试从 api 接收消息时,该对象正在变成一个 HashMap

Object response = jmsTemplate.receiveAndConvert(REQUEST_QUEUE_NAME);

这是因为 SimpleMessageConverter 类在下面的方法中将所有 MapMessage 转换为 HashMap。

 protected Map<String, Object> extractMapFromMessage(MapMessage message) 
throws JMSException {
    Map<String, Object> map = new HashMap();
    Enumeration en = message.getMapNames();

    while(en.hasMoreElements()) {
        String key = (String)en.nextElement();
        map.put(key, message.getObject(key));
    }

    return map;
}

是否可以添加新功能或者这种情况可以被视为错误?还是我应该手动将此哈希图转换为并发哈希图?

标签: springspring-jms

解决方案


只需将简单转换器子类化并覆盖extractMapFromMessage()


推荐阅读