Spring integration SimpleMessageListenerContainer-AMQP接收消息上的ClassNotFoundException警告

Spring integration SimpleMessageListenerContainer-AMQP接收消息上的ClassNotFoundException警告,spring-integration,spring-integration-dsl,spring-integration-amqp,Spring Integration,Spring Integration Dsl,Spring Integration Amqp,我刚刚将我的应用程序更新到版本spring-integration-amqp-5.2.4。发布版,当我从队列收到消息时,一切正常,但我注意到DefaultAmqpHeaderMapper类中的警告java.lang.ClassNotFoundException。我使用自定义DefaultJackson2JavaTypeMapper和IdClassMapping。如何避免跟踪警告 @Bean public Jackson2JavaTypeMapper defaultJackson2JavaType

我刚刚将我的应用程序更新到版本
spring-integration-amqp-5.2.4。发布版
,当我从队列收到消息时,一切正常,但我注意到
DefaultAmqpHeaderMapper
类中的警告
java.lang.ClassNotFoundException
。我使用自定义
DefaultJackson2JavaTypeMapper
IdClassMapping
。如何避免跟踪警告

@Bean
public Jackson2JavaTypeMapper defaultJackson2JavaTypeMapper() {
    DefaultJackson2JavaTypeMapper defaultJackson2JavaTypeMapper = new DefaultJackson2JavaTypeMapper();
    Map<String, Class<?>> classMapping = new HashMap<>();
    classMapping.put("event.request", RequestDTO.class);
    defaultJackson2JavaTypeMapper.setIdClassMapping(classMapping);
    return defaultJackson2JavaTypeMapper;
}

@Bean
public MessageConverter messageConverterJson(ObjectMapper objectMapper) {
    Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter(objectMapper);
    messageConverter.setJavaTypeMapper(defaultJackson2JavaTypeMapper());
    return messageConverter;
}

由于您已经通过
Jackson2JsonMessageConverter
将AMQP消息映射到目标负载,因此看起来您根本不需要任何传入的头

为了避免这个警告和额外的映射工作,我建议您插入一个定制的
AmqpHeaderMapper
。当您从请求返回用于映射的空标头时,可能只是对
DefaultAmqpHeaderMapper
的扩展:

amqpInboundGateway.setHeaderMapper(new DefaultAmqpHeaderMapper(null, null) {

        @Override
        public Map<String, Object> toHeadersFromRequest(MessageProperties source) {
            return new HashMap<>();
        }

    });
amqpInboundGateway.setHeaderMapper(新的DefaultAmqpHeaderMapper(null,null){
@凌驾
公共映射到HeadersFromRequest(MessageProperties源){
返回新的HashMap();
}
});
另一方面,它只是一个警告:您可以简单地将
org.springframework.integration.amqp.inbound
类别的日志记录级别降低为ERROR

关键是,如果我们找不到
\uuu类型\uuu
头的类,我们就不能忽略这样的错误。该框架无法对您期望的内容进行假设

另一种可能的修复方法是在重写
fromMessage()
时,从
Jackson2JsonMessageConverter
扩展中的
MessageProperties.getHeaders()
中删除这些JSON头

amqpInboundGateway.setHeaderMapper(new DefaultAmqpHeaderMapper(null, null) {

        @Override
        public Map<String, Object> toHeadersFromRequest(MessageProperties source) {
            return new HashMap<>();
        }

    });