TypeIdPropertyName是标识实体的属性的名称。Jackson映射器应知道反序列化传入JSON时使用哪个实体。
该请求应如下所示:
{ "_type" : "hello.Email", "to" : "Imran", "from" : "dzatorsky"}顺便说一句,我认为这不是最好的解决方案,因为JMS已经知道要使用哪种类型(可以在方法中声明)。另一个缺点是,您在消息中指定了实体和软件包的名称,这将很难维护(每次更改软件包或实体名称都会很麻烦)。
这是更可靠的配置:
@EnableJms@Configurationpublic 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发送消息,则可以将此组件添加到配置中:
@Componentpublic class JsonMessageConverter implements MessageConverter { @Autowired private ObjectMapper mapper; @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; } @Override public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException { return ((TextMessage) message).getText(); }}使用此配置,您可以跳过邮件中令人讨厌的“ _type”字段。


![由以下原因引起:org.springframework.jms.support.converter.MessageConversionException:在消息上找不到类型id属性[_type] 由以下原因引起:org.springframework.jms.support.converter.MessageConversionException:在消息上找不到类型id属性[_type]](http://www.mshxw.com/aiimages/31/466254.png)
