Требуются ли какие-либо дополнительные атрибуты для принудительного включения типа java в весеннюю интеграцию? - PullRequest
1 голос
/ 04 марта 2020

Мы используем пружинное интегрирование (xml конфигурация на основе), в котором мы выполняем следующие шаги:

  1. Преобразование полезной нагрузки (java -объект) в json
  2. Выполните вызов API остальных
  3. Преобразование обратно в java -объект
<int:object-to-json-transformer content-type="test.Request" input-channel="objectToJsonChannel" output-channel="apiChannel"/>
       <int-http:outbound-gateway id="apiChannel"
            request-channel="apiChannel"
            reply-channel="jsonToObjectChannel"
                        ....
            />
         <int:json-to-object-transformer type="test.Response" input-channel="jsonToObjectChannel" output-channel="responseChannel"/>

Выше код работает до версии 5.1 с весенней интеграцией. Когда я обновляюсь до 5.2. Он начинает выдавать исключение как org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [test.Request] to type [test.Response].

Я заметил, что object-to-json-transformer добавляет тип класса в заголовок с ключом json__TypeId__. Затем он использует этот тип класса для json-to-object-transformer.

Но ожидается, что атрибут type, упомянутый в json-to-object-transformer, должен использоваться, если он упоминается.

Пожалуйста, предложите исправить эту проблему или это действительно ошибка в интеграции с пружиной (5.2).

1 Ответ

1 голос
/ 04 марта 2020

Попробуйте добавить <header-filter header-names="json_*" /> перед вызовом службы REST. <int:object-to-json-transformer> заполняет JsonHeaders, чтобы дать нисходящему потоку знать, какой реальный тип JSON мы каррируем в полезной нагрузке.

A <int:json-to-object-transformer> предпочитает эти заголовки вместо stati c type. , Но поскольку payload уже представляет собой представление, отличное от этих заголовков запросов, оно делает неправильную вещь.

Я бы предложил вариант на <int:json-to-object-transformer>, чтобы сделать предпочтение, но это не было бы полностью логично. Поскольку мы изменили полезную нагрузку, было бы лучше изменить соответствующие заголовки. В противном случае мы просто обманываем себя.

С другой стороны, HTTP Outbound Gateway может позаботиться о том, чтобы вы преобразовали запрос в JSON для сети и обратно из JSON ответа на некоторый тип POJO.

См. https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/http.html#http -выход и его expected-response-type. Если заголовок contentType является application/json, то лучше избегать этих <int:object-to-json-transformer> & <int:json-to-object-transformer>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...