在json到对象转换过程中出现异常:无法解析“json__TypeId__”(在'javaTypes'中)

pdsfdshx  于 2023-10-21  发布在  Java
关注(0)|答案(1)|浏览(113)

我正在阅读一个带有JSON消息的队列,并且在侦听器中,我试图从该JSON中访问消息作为对象。这是使用的转换器:

@Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("BrokerTrade.class");
    return converter;
}

我遇到了下面的例外。

org.springframework.integration.transformer.MessageTransformationException: failed to transform message; nested exception is java.lang.IllegalArgumentException: Could not resolve 'json__TypeId__' in 'javaTypes'.

下面是示例json,我使用jmsTemplate将其添加到队列中。
{“id”:1,“tradeSourceId”:“mytradeSourceId”,“messageOriginCode”:“CXE”,“sequenceNumber”:“1”,“messageType”:“TRANSFER”,“movementCode”:“1”,“transferType”:“NORMAL”,“updateType”:“无更新”}
请帮帮我

dhxwm5r4

dhxwm5r41#

>converter.setTypeIdPropertyName("BrokerTrade.class");

这应该是消息中String属性的名称,该属性包含有关要转换为的类型的信息-可以是完全限定的类名,也可以是要在类Map中查找以确定类名的值。
如果消息不包含类型信息,则必须子类化转换器并重写getJavaTypeForMessage以返回JacksonJavaType.

/**
 * 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 {
...
}

你通常可以使用objectMapper来实现这一点。

objectMapper.getTypeFactory().constructType(BrokerTrade.class)

相关问题