gpt4 book ai didi

java - Spring JMS json消息转换器

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:18 24 4
gpt4 key购买 nike

我在使用 spring-jms 模块转换来自 RabbitMQ 的消息时遇到一些问题。以前我使用 Rest API 端点发送消息,该端点将消息发送到 RabbitMQ 队列并使用 @JmsListener 方法处理它。

此行为在内部添加一个字段来确定 Java 类型,由 Spring 库管理。但是现在我想避免 Rest API 调用,因为没有必要,我可以直接将消息发送到 RabbitMQ。

问题是当 spring 尝试将 JMS 消息转换为 @JmsListener 参数时。我没有设置消息的类型,因为发送者不需要该信息,但现在我无法直接转换它,因为 MappingJackson2MessageConverter 需要一个属性。

如何避免这个问题?我希望能够处理所有消息,而无需知道所有“发件人”的类型。

消息转换器 bean:

   @Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}

监听器示例代码:

 @JmsListener(concurrency = "listener.concurrency", destination = "queue.name", containerFactory = "container.factory")
public void processFile(MyDtoClass dto) {
....
}

最佳答案

子类化转换器并重写getJavaTypeForMessage()以返回您想要的类型...

/**
* Determine a Jackson JavaType for the given JMS Message,
* typically parsing a type id message property.
* <p>The default implementation parses the configured type id property name
* and consults the configured type id mapping. This can be overridden with
* a different strategy, e.g. doing some heuristics based on message origin.
* @param message the JMS Message to set the type id on
* @throws JMSException if thrown by JMS methods
* @see #setTypeIdOnMessage(Object, javax.jms.Message)
* @see #setTypeIdPropertyName(String)
* @see #setTypeIdMappings(java.util.Map)
*/
protected JavaType getJavaTypeForMessage(Message message) throws JMSException {

关于java - Spring JMS json消息转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com