我使用concurrenthashmap payload创建了一个集成消息,如下所示
return MessageBuilder.createMessage(emvMessage.getResponse(), headers);
其中emvMessage.getResponse()方法返回
public ConcurrentHashMap<String, Object> getResponse() {
...
}
到现在为止还挺好。但是当我尝试从api接收消息时,对象变成了HashMap
Object response = jmsTemplate.receiveAndConvert(REQUEST_QUEUE_NAME);
这是因为SimpleMessageConverter类在以下方法中将所有MapMessages转换为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;
}
是否可以添加新功能或将此情况视为错误?或者我应该手动将此hashmap转换为concurrenthashmap吗?
只需将简单转换器子类化并覆盖extractMapFromMessage()
。