我正在通过Rabbitmq进行通信的组件之间执行集成测试。 我有一个使用此处理程序方法的消费者:
@RabbitHandler
public List<Call> handle(CallRecordMonthRequest request){
return source.getCalls(request.getMonth(), request.getYear());
}
但是,有时当消费者尝试处理消息时,它会失败并出现以下异常:
org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException:无法使用参数类型= [class [B],value = [{[B @ 7d202207}]]调用目标方法'handle' ... ... ... 引起:java.lang.NoSuchMethodException:org.rainn.reporting.communication.RabbitMqAdapter.handle([B]
我添加了一个处理程序,它接受byte[]
,当我把它变成一个字符串时,它是相同的json有效负载,意味着被反序列化为正确的类型。
答案 0 :(得分:0)
这可能意味着错误消息没有contentType
属性。 Jackson2JsonMessageConverter
会将任何没有内容类型的消息(或者包含不包含字符串json
的消息)作为byte[]
返回。
消息通常应为contentType
application/json
。
如果您无法修复发件人,则可以对转换器进行子类化,并覆盖fromMessage
,如下所示...
public Object fromMessage(Message message, Object conversionHint) throws MessageConversionException {
MessageProperties properties = message.getMessageProperties();
if (properties.getContentType == null) {
properties.setContentType("application/json");
}
super.fromMessage(message, conversionHint);
}