Set BEST_MATCHING_HANDLER_ATTRIBUTE in WebFlux.fn
SPR-17367
This commit is contained in:
parent
f12c28e402
commit
8de5c05af0
|
|
@ -18,6 +18,7 @@ package org.springframework.web.reactive.function.server.support;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -27,6 +28,7 @@ import org.springframework.http.codec.HttpMessageReader;
|
|||
import org.springframework.http.codec.ServerCodecConfigurer;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.reactive.function.server.HandlerFunction;
|
||||
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||
import org.springframework.web.reactive.function.server.RouterFunctions;
|
||||
import org.springframework.web.reactive.function.server.ServerRequest;
|
||||
|
|
@ -142,12 +144,32 @@ public class RouterFunctionMapping extends AbstractHandlerMapping implements Ini
|
|||
protected Mono<?> getHandlerInternal(ServerWebExchange exchange) {
|
||||
if (this.routerFunction != null) {
|
||||
ServerRequest request = ServerRequest.create(exchange, this.messageReaders);
|
||||
exchange.getAttributes().put(RouterFunctions.REQUEST_ATTRIBUTE, request);
|
||||
return this.routerFunction.route(request);
|
||||
return this.routerFunction.route(request)
|
||||
.doOnNext(handler -> setAttributes(exchange.getAttributes(), request, handler));
|
||||
}
|
||||
else {
|
||||
return Mono.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void setAttributes(Map<String, Object> attributes, ServerRequest serverRequest,
|
||||
HandlerFunction<?> handlerFunction) {
|
||||
|
||||
attributes.put(RouterFunctions.REQUEST_ATTRIBUTE, serverRequest);
|
||||
attributes.put(BEST_MATCHING_HANDLER_ATTRIBUTE, handlerFunction);
|
||||
|
||||
String matchingPattern =
|
||||
(String) attributes.get(RouterFunctions.MATCHING_PATTERN_ATTRIBUTE);
|
||||
if (matchingPattern != null) {
|
||||
attributes.put(BEST_MATCHING_PATTERN_ATTRIBUTE, matchingPattern);
|
||||
}
|
||||
Map<String, String> uriVariables =
|
||||
(Map<String, String>) attributes
|
||||
.get(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
|
||||
if (uriVariables != null) {
|
||||
attributes.put(URI_TEMPLATE_VARIABLES_ATTRIBUTE, uriVariables);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue