Несколько аннотаций @JsonPath не работают - PullRequest
0 голосов
/ 25 мая 2018

Я звоню в службу REST через компонент http4 Camel и хочу сопоставить ответ JSON с некоторыми заголовками.По этой причине я использовал язык jsonpath.

<route>
   ...
   <toD uri="http4://theCallingServiceUrl"/>

   <setHeader headerName="CamelAddressesLink">
      <jsonpath>$._links.collection/addresses.href</jsonpath>
   </setHeader>
   <setHeader headerName="CamelAvailabilitiesLink">
     <jsonpath>$._links.collection/availabilities.href</jsonpath>
   </setHeader>
</route>

Проблема возникает, когда я пытаюсь сделать то же самое с помощью bean-компонента.

public void test(@JsonPath("$._links.collection/addresses.href") String address,
                 @JsonPath("$._links.collection/availabilities.href") String availabilities) {
            ...
}

Я получаю следующее

Caused by: com.jayway.jsonpath.PathNotFoundException: Expected to find an object with property ['_links'] in path $ but found 'java.lang.String'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.

Есть идеи?Если я пытаюсь извлечь только одно значение из JSON, это работает, проблема возникает, если я пытаюсь добавить более одной аннотации @JsonPath.

Спасибо!

1 Ответ

0 голосов
/ 21 июня 2018

Кажется, что компонент компонента сбрасывает кэш потока.Таким образом, даже если я установил кэш потока в маршрут, этот параметр удаляется при выполнении компонента.Именно поэтому мы можем использовать только 1 @ JsonPath.

Альтернатива преобразованию тела в String сразу после компонента http4 с

<toD uri="http4://theCallingServiceUrl"/>
<convertBodyTo type="String"/>

, и теперь наш компонент будет работать сстолько @JsonPath, сколько мы хотим.

...