есть
/**
* Specify a {@link Function} to evaluate in order to generate the Message payload.
* @param payloadFunction The payload {@link Function}.
* @param <P> the expected HTTP request body type.
* @return the spec
* @see HttpRequestHandlingEndpointSupport#setPayloadExpression(Expression)
*/
public <P> S payloadFunction(Function<HttpEntity<P>, ?> payloadFunction) {
на WebFluxInboundEndpointSpec
, но у вас нет доступа к переменным контекста оценки или даже к исходному ServerWebExchange
, в функции доступна только RequestEntity
.
Поскольку вы сохранили эту переменную пути id
в полезной нагрузке сообщения для отправки вниз по потоку через payloadExpression("#pathVariables.id")
, она действительно доступна в WebFlux.outboundGateway()
для доступа.
Прямо сейчас у вас есть жестко закодированный uri
, но вы можете использовать вместо этого вариант:
/**
* Create an {@link WebFluxMessageHandlerSpec} builder for request-reply gateway
* based on provided {@code Function} to evaluate target {@code uri} against request message.
* @param uriFunction the {@code Function} to evaluate {@code uri} at runtime.
* @param <P> the expected payload type.
* @return the WebFluxMessageHandlerSpec instance
*/
public static <P> WebFluxMessageHandlerSpec outboundGateway(Function<Message<P>, ?> uriFunction) {
Итак, ваш конфиг выглядит следующим образом:
WebFlux.outboundGateway(m -> "http://localhost:8080/customers/" + m.getPayload())