Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t将消息对象从RabbitMQ转换为java类_Java_Spring_Rabbitmq_Spring Amqp - Fatal编程技术网

Can';t将消息对象从RabbitMQ转换为java类

Can';t将消息对象从RabbitMQ转换为java类,java,spring,rabbitmq,spring-amqp,Java,Spring,Rabbitmq,Spring Amqp,我创建了RabbitListener以从RabbitMQ队列获取消息 我的rabbitMQ消息: Properties priority: 0 delivery_mode: 2 headers: __TypeId__: com.kmb.bank.models.Transfer content_encoding: UTF-8 content_type: application/json Payload 356 bytes Encoding: string {"user

我创建了RabbitListener以从RabbitMQ队列获取消息

我的rabbitMQ消息:

Properties  
priority:   0
delivery_mode:  2
headers:    
__TypeId__: com.kmb.bank.models.Transfer
content_encoding:   UTF-8
content_type:   application/json
Payload
356 bytes
Encoding: string


{"userAccountNumber":"1111444422221111","title":"123","recipientName":"123","recipientAccountNumber":"1234123412341234","amount":123.0,"localDateTime":{"nano":526106200,"year":2018,"monthValue":11,"dayOfMonth":29,"hour":20,"minute":43,"second":0,"month":"NOVEMBER","dayOfWeek":"THURSDAY","dayOfYear":333,"chronology":{"id":"ISO","calendarType":"iso8601"}}}
我的侦听器方法:

@Autowired
private Jackson2JsonMessageConverter jackson2JsonMessageConverter;

@RabbitListener(queues = "kolejka")
public void listen(Message message) {
    try {
        Transfer transfer = (Transfer) jackson2JsonMessageConverter.fromMessage(message);
        log.info(transfer);
    } catch (Exception e) {
        log.debug("Error thrown while listening + " + e.getMessage());
    }

}
Bean配置: @豆子 公共对象映射器对象映射器(){ 返回新的ObjectMapper(); }

转学班:

package com.kmb.transactionlogger.models;

@AllArgsConstructor
public class Transfer {
    @Getter @Setter
    private String userAccountNumber;
    @Getter @Setter
    private String title;
    @Getter @Setter
    private String recipientName;
    @Getter @Setter
    private String recipientAccountNumber;
    @Getter @Setter
    private double amount;
    @Getter @Setter
    private LocalDateTime localDateTime;

}
不幸的是,从消息转换到传输对象时引发异常

Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to resolve class name. Class not found [com.kmb.bank.models.Transfer]
2018-11-29 20:47:01.615  WARN 13688 --- [cTaskExecutor-1] ingErrorHandler$DefaultExceptionStrategy : Fatal message conversion error; message rejected; it will be dropped or routed to a dead letter exchange, if so configured: (Body:'{"userAccountNumber":"1111444422221111","title":"123","recipientName":"123","recipientAccountNumber":"1234123412341234","amount":123.0,"localDateTime":{"nano":599669800,"year":2018,"monthValue":11,"dayOfMonth":29,"hour":20,"minute":47,"second":1,"month":"NOVEMBER","dayOfWeek":"THURSDAY","dayOfYear":333,"chronology":{"id":"ISO","calendarType":"iso8601"}}}' MessageProperties [headers={__TypeId__=com.kmb.bank.models.Transfer}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=bank, receivedRoutingKey=, deliveryTag=2, consumerTag=amq.ctag-sLNqW-_WhDWLWJk6MCQcjg, consumerQueue=kolejka])
整个消息日志:

您必须在接收
Jackson2JsonMessageConverter
的类型映射器中设置类型映射,以映射到不同的类

通常,发送方会将其类映射到令牌,例如
传输
,接收方会将其映射到其版本的
传输

或者,如果您使用
public void listen(Transfer-Transfer)
,并且将转换器连接到侦听器容器工厂,则框架将从参数推断类型


如果是Spring引导应用程序,那么这种连接将自动进行

你能提供更详细的日志(stacktrace)吗?我认为这是一个问题,它是不同的传输类,package与TypeId不同,但我不知道解决方案。你必须在接收
jackson2JsonMessageConverter
的类型映射器中设置类型映射,以映射到不同的类。或者,如果使用
public void listen(Transfer-Transfer)
将转换器连接到侦听器容器工厂,则框架将根据参数推断类型。如果它是一个启动应用程序,这将自动发生。这有点帮助,但现在我发现与LocalDateTime相关的错误:由:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造
java.time.LocalDateTime
的实例(不存在像默认构造一样的创建者):无法从对象值(无委托或基于属性的创建者)反序列化您需要将自定义Jackson反序列化器应用于ObjectMapper-以下是一个有答案的问题:
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to resolve class name. Class not found [com.kmb.bank.models.Transfer]
2018-11-29 20:47:01.615  WARN 13688 --- [cTaskExecutor-1] ingErrorHandler$DefaultExceptionStrategy : Fatal message conversion error; message rejected; it will be dropped or routed to a dead letter exchange, if so configured: (Body:'{"userAccountNumber":"1111444422221111","title":"123","recipientName":"123","recipientAccountNumber":"1234123412341234","amount":123.0,"localDateTime":{"nano":599669800,"year":2018,"monthValue":11,"dayOfMonth":29,"hour":20,"minute":47,"second":1,"month":"NOVEMBER","dayOfWeek":"THURSDAY","dayOfYear":333,"chronology":{"id":"ISO","calendarType":"iso8601"}}}' MessageProperties [headers={__TypeId__=com.kmb.bank.models.Transfer}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=bank, receivedRoutingKey=, deliveryTag=2, consumerTag=amq.ctag-sLNqW-_WhDWLWJk6MCQcjg, consumerQueue=kolejka])