当我尝试使用Spring AMQP在生产者端发送LinkedHashMap请求时,无法在Listener中强制转换异常。
请求 -
Map<String, Object> reqMap = new LinkedHashMap<String, Object>();
Employee emp = new Employee();
reqMap.put("empObj", emp);
reqMap.put("comp", "XYZ");
template.convertAndSend(reqMap);
Respons -
void handleMessage(Map myReqMsg){
Employee emp = (Employee) myReqMsg.get("empObj");
}
消费者端的例外情况: - ClassCastException:无法将java.util.LinkedHashMap(id = 173)强制转换为com.sw.Employee
日志跟踪 -
WARN [.listener.SimpleMessageListenerContainer]: Execution of Rabbit message listener failed, and no ErrorHandler has been set.
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener method 'handleMessage' threw exception
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:457)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:358)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:546)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:472)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:61)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:110)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:611)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:454)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:474)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:458)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$300(SimpleMessageListenerContainer.java:61)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:551)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.steelwedge.amqp.util.Employee
at com.steelwedge.amqp.producer.TestMessageHandler.handleMessage(TestMessageHandler.java:25)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:451)
... 12 more
谢谢, Sekhar
答案 0 :(得分:0)
你应该进行转换: 即。
ObjectMapper om = new ObjectMapper();
om.convertValue(object, clazz);