Я немного разбираюсь в Spring Integration, и до сих пор я использовал исходящие адаптеры JMS и File, и теперь я хочу представить выходной адаптер HTTP для поддержки Spring REST.Пока все хорошо, я смог вызвать внешний REST API с любой другой проблемой, как показано ниже.
Spring Integration Config
<int-http:outbound-gateway id="outbound.gateway"
request-channel="get.request.channel" url="https://jsonplaceholder.typicode.com/posts/1"
http-method="GET" expected-response-type="com.cst.entity.Post"
charset="UTF-8" reply-timeout="5000" reply-channel="reply.channel">
</int-http:outbound-gateway>
Вызов исходящего шлюза
public void restTest() throws Exception{
Message<?> message = MessageBuilder.withPayload().build();
getRequestChannel.send(message);
Message<?> receivedMsg = receivedChannel.receive();
Post post = (Post) receivedMsg.getPayload();
System.out.println("############## ServerMsg ##############");
System.out.println(post.toString());
System.out.println("############## Done! ##############");
}
ОднакоЯ хочу разработать среду, в которой разработчики могут вызывать любой URL-адрес REST любым методом и ожидать различных типов ответов.Я нашел способ динамической установки URL-адреса, как показано ниже, введя
<int-http:outbound-gateway id="outbound.gateway"
request-channel="get.request.channel" url="{fhirurl}"
http-method="GET" expected-response-type="com.bst.pages.crm.web.Post"
charset="UTF-8" reply-timeout="5000" reply-channel="reply.channel">
</int-http:outbound-gateway>
с
public void restTest() throws Exception{
FHIRInput input = new FHIRInput();
input.setUrl(url);
Message<?> message = MessageBuilder.withPayload(input).build();
getRequestChannel.send(message);
Message<?> receivedMsg = receivedChannel.receive();
Post post = (Post) receivedMsg.getPayload();
System.out.println("############## ServerMsg ##############");
System.out.println(post.toString());
System.out.println("############## Done! ##############");
}
Затем я попытался реализовать динамические методы HTTP с динамическими типами ответов, используя вышеуказанный метод, и этоне работает, и похоже, что мы можем обрабатывать только URL, используя <int-http:uri-variable/>
.
Что было бы идеальным решением для этого.благодарю за помощь
Спасибо, Кет
РЕДАКТИРОВАТЬ
После следующих комментариев я смог реализовать среду, в которой разработчики могут вызывать использование динамических URL-адресов на основе содержимого полезной нагрузки.ниже моя конфигурация для исходящего адаптера HTTP.
<int-http:outbound-gateway id="outbound.gateway"
request-channel="get.request.channel" url="{fhirurl}"
http-method-expression="payload.getHttpMethod()" expected-response-type-expression="payload.getResponseType()"
charset="UTF-8" reply-timeout="5000" reply-channel="reply.channel">
<int-http:uri-variable name="fhirurl" expression="payload.getUrl()"/>
</int-http:outbound-gateway>
Однако я все еще ищу способ передать тело динамического запроса в качестве параметра POST.Поскольку мы используем полезную нагрузку для переноса URL-адреса, метода http и ожидаемого типа ответа, я не могу передать тело запроса.