- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试这个 Spring JMS 示例,但它给出了错误。 https://spring.io/guides/gs/messaging-jms/ 原因:org.springframework.jms.support.converter.MessageConversionException:无法在来自目标 [queue://mailbox] 的消息上找到类型 id 属性 [_type]
有趣的是,如果我克隆它并运行一切都运行良好。如果我复制并粘贴,则会出现错误。
@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
这段代码实际上导致了错误。搜索网络和文档,我仍然不知道如何以及设置 setTypeIdPropertyName 值以及“_type”在该项目中指的是什么?既然消息没有这样的属性,那么它是从哪里来的呢?
最佳答案
TypeIdPropertyName
是标识实体的属性名称。 Jackson 映射器应该知道反序列化传入 JSON 时要使用哪个实体。
请求应如下所示:
{
"_type" : "hello.Email",
"to" : "Imran",
"from" : "dzatorsky"
}
顺便说一句,我认为这不是最好的解决方案,因为 JMS 已经知道要使用什么类型(您在方法中声明它)。另一个缺点是您在消息中指定实体和包的名称,这将很难维护(包或实体名称的每次更改都会很痛苦)。
这是更强大的配置:
@EnableJms
@Configuration
public class JmsListenerConfig implements JmsListenerConfigurer {
@Bean
public DefaultMessageHandlerMethodFactory handlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(messageConverter());
return factory;
}
@Bean
public MessageConverter messageConverter() {
return new MappingJackson2MessageConverter();
}
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(handlerMethodFactory());
}
}
此外,如果您使用 Spring JmsTemplate 发送消息,您可以将此组件添加到您的配置中:
/**
* Used to convert JMS messages from/to JSON. Registered in Spring-JMS automatically via auto configuration
*/
@Component
public class JsonMessageConverter implements MessageConverter {
@Autowired
private ObjectMapper mapper;
/**
* Converts message to JSON. Used mostly by {@link org.springframework.jms.core.JmsTemplate}
*/
@Override
public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
String json;
try {
json = mapper.writeValueAsString(object);
} catch (Exception e) {
throw new MessageConversionException("Message cannot be parsed. ", e);
}
TextMessage message = session.createTextMessage();
message.setText(json);
return message;
}
/**
* Extracts JSON payload for further processing by JacksonMapper.
*/
@Override
public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException {
return ((TextMessage) message).getText();
}
}
通过此配置,您可以跳过消息中烦人的“_type”字段。
关于java - 由 : org. springframework.jms.support.converter.MessageConversionException 引起:无法在消息上找到类型 id 属性 [_type],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526371/
我想处理来自队列的消息,当它们具有某种格式并且可以反序列化为某个Java类时。为此,我创建了以下方法。 @JmsListener(destination = "myQueue", containerF
我正在尝试解决 SQS 队列的序列化问题,这里是代码: @Configuration public class QueueConfig { @Bean public QueueMess
我有一个接受 @Payload 字符串的 @StreamListener。为了测试这个 Listener 类,我使用嵌入式 Kafka 编写了一个 Junit 类。我在运行测试类时遇到以下错误 错误
我有两个服务应该通过 Kafka 进行通信。我们将第一个服务命名为 WriteService,将第二个服务命名为 QueryService。 在WriteService方面,我为生产者进行了以下配
我正在发送一个 avro 对象 User 并在监听器中接收它。这里是配置 @Bean public ProducerFactory userProducerFactory() { Map co
我正在发送一个 avro 对象 User 并在监听器中接收它。这里是配置 @Bean public ProducerFactory userProducerFactory() { Map co
我正在使用 spring-cloud-sleuth 和 zipkin。在生产者中,它起作用了。我可以在 kafka 主题 see image 中看到消息。但在消费者中,出现了一些异常。 201
我正在尝试这个 Spring JMS 示例,但它给出了错误。 https://spring.io/guides/gs/messaging-jms/ 原因:org.springframework.jms
我是一名优秀的程序员,十分优秀!