0

当我尝试使用 Spring AMQP 在生产者端发送 LinkedHashMap 作为请求时,无法在侦听器中投射异常。

要求 -

Map<String, Object> reqMap = new LinkedHashMap<String, Object>();
Employee emp = new Employee();
reqMap.put("empObj", emp);
reqMap.put("comp", "XYZ");
template.convertAndSend(reqMap);

回应——

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

谢谢, 塞卡

4

1 回答 1

1

你应该做一个转换:即

ObjectMapper om = new ObjectMapper();
om.convertValue(object, clazz);
于 2016-05-02T06:31:27.953 回答