Исключение во время преобразования json в объект: не удалось разрешить json__TypeId__ в javaTypes - PullRequest
0 голосов
/ 11 мая 2018

Я читаю очередь с сообщением 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.

{ "Идентификатор": 1, "tradeSourceId": "mytradeSourceId", "messageOriginCode": "CXE", "sequenceNumber": "1", "messageType": "TRANSFER", код движения: 1, "TransferType": "NORMAL", "updateType": "Нет обновлений" }

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 мая 2018
>converter.setTypeIdPropertyName("BrokerTrade.class");

Предполагается, что это имя свойства String в сообщении, содержащем информацию о типе, в который необходимо преобразовать, - либо полное имя класса, либо значение, которое нужно посмотреть в сопоставлениях классов для определения класса.name.

Если сообщение не содержит информацию о типе, вам нужно создать подкласс конвертора и переопределить getJavaTypeForMessage, чтобы вернуть Джексона JavaType ...

/**
 * 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)
...