我试图从Rabbit获取java对象但是得到了这个
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to convert Message content. Could not resolve __TypeId__ in header
所以我可以改变远程服务器格式,然后我应该如何更新我的bean?
@Bean
public MessageConverter jsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
以及如何发送回信息?
使用DefaultClassMapper
出现同样的错误
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to convert Message content. Could not resolve __TypeId__ in header
代码
@Bean
public DefaultClassMapper typeMapper() {
DefaultClassMapper typeMapper = new DefaultClassMapper();
typeMapper.setDefaultType(MyType.class);
return typeMapper;
}
@Bean
public MessageConverter jsonMessageConverter(DefaultClassMapper defaultClassMapper) {
Jackson2JsonMessageConverter jsonMessageConverter = new Jackson2JsonMessageConverter();
jsonMessageConverter.setClassMapper(defaultClassMapper);
return jsonMessageConverter;
}
我无法将Object转换为JSON。 我有转换器类
public class MySendTypeSerializer extends JsonSerializer<MySendType> {
@Override
public void serialize(MySendType mySendType, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException { //.. impl }}
和课堂本身
@JsonSerialize(using = MySendTypeSerializer.class)
public class MySendType {
// Regular POJO
}
尽管使用@JsonDeserialize的Deserializer运行良好,但所有这些东西都没有调用过。可能我错过了这个队列的配置(发送队列)与接收队列不同。
现在转换器配置看起来像这样
@Bean
SimpleMessageListenerContainer persistenceListenerContainer(ConnectionFactory connectionFactory,
@Qualifier("persistenceListenerAdapter") MessageListenerAdapter listenerAdapter,
MessageConverter messageConverter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueues(sendQueue());
listenerAdapter.setMessageConverter(new Jackson2JsonMessageConverter());
container.setMessageListener(listenerAdapter);
return container;
}
这可能仅适用于JSON-&gt; Object ??
答案 0 :(得分:1)
如果您没有使用默认的类映射器标头来传达类型信息,则需要提供自定义ClassMapper
或自定义DefaultClassMapper
。
如果您的类型是固定的,如果消息中没有信息来确定类型,则默认类映射器将回退到其默认类型:
myDefaultClassMapper.setDefaultType(MyType.class);
然后将映射器注入消息转换器。