Интеграция Spring, вызывающая службу RESTful Apache Solr

Я хотел бы вызвать Apache Solr, используя Spring Integration. Solr предоставляет RESTful-подобные функции для поиска, например. Я хочу вызвать: http://localhost:8983/solr/#/ccy/query?q=id:*&wt=json это вернет строку json.

Таким образом, план состоит в том, чтобы предоставить контроллер ReferenceData, который вызывает службу, которая, в свою очередь, будет вызывать Solr через интеграцию Spring. Но мне нужно, чтобы ответ был синхронным.

Я просмотрел предоставленный образец кода Spring Integration и наткнулся на пример rest-http. Но это не по моей голове. Итак, как я могу это сделать, и любой пример кода будет полезен.

Спасибо ГМ


person user2279337    schedule 24.05.2013    source источник


Ответы (2)


Остальная выборка сосредоточена на стороне сервера; на стороне клиента вам понадобится что-то вроде...

<int:gateway id="toRest" default-request-channel="foo" service-interface="ToRest" />

<int:channel id="foo" />

<int-http:outbound-gateway id="out" request-channel="foo"
    http-method="GET"
    url="http://localhost:8983/solr/ccy/query?q=id:{currency}&amp;wt=json">
        <int-http:uri-variable name="currency" expression="headers['currency']"/>
</int-http:outbound-gateway>

Поскольку ToRest является интерфейсом Java с методом, подобным String toRest(String in); введите экземпляр ToRest в свой контроллер и просто отправьте пустую строку "".

Однако я думаю, что # в середине URL создаст вам проблемы.

РЕДАКТИРОВАТЬ:

Добавлено uri-variable - выражение может быть любым выражением SpEL, например. payload.currency (вызывает getCurrency() в полезной нагрузке сообщения); headers['currency']; или @someBean.determineCurrency(payload); и т. д. и т. д.

Ваш шлюз может заполнить заголовок...

String result(@Payload String payload, @Header("currency") String currency);

Конечно, поскольку вы выполняете только GET, вы можете просто установить валюту в полезной нагрузке и просто использовать expression="payload".

person Gary Russell    schedule 24.05.2013
comment
Гэри, спасибо, именно это я и сделал. И да, убрал '#', он должен был быть ..../solr/ccy/.... У меня есть еще один вопрос. Мне нужно, чтобы некоторые части URL-адреса были динамическими, например. ?q=id:* можно изменить на ?q=id:GBP, так как я могу изменить это на лету в Spring Integration? - person user2279337; 25.05.2013
comment
Спасибо, Гэри. Я попробую это. - person user2279337; 25.05.2013