Я пытаюсь получить объект Java из кролика, но получил этоMarshalling/unmarshalling POJO с Jackson2 для RabbitMQ. Без типа, установленного в голове?
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to convert Message content. Could not resolve __TypeId__ in header
Так что я могу изменить формат удаленного сервера, как я должен обновить свой боб тогда?
@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;
}
Я не могу преобразовать объект в 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 работает хорошо. Вероятно, я пропустил что-то в конфигурации для этой очереди (очередь отправки) отличается от ее получения.
Сейчас конвертер конфигурации выглядит следующим образом
@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-> Object ??
Как это сделать точно ?? Я сделал Публичный классMyTypeSerializer расширяет JsonSerializer Не слишком большой успех –
Вам нужно точно описать, что вы хотите. Должны ли ваши сообщения всегда конвертироваться в объекты одного класса? Или вам нужно каким-то образом определить, к какому классу нужно преобразовать, основываясь на некоторой информации в сообщении? Если да, то какая информация? С этой информацией я могу помочь вам дальше. –
Мне нужно получить один тип и отправить другой тип. Типы никогда не меняются. Таким образом, JSON все тот же. –