|
|
|
@ -1248,7 +1248,7 @@ public abstract class RouterFunctions {
@@ -1248,7 +1248,7 @@ public abstract class RouterFunctions {
|
|
|
|
|
ServerRequest request = new DefaultServerRequest(exchange, this.strategies.messageReaders()); |
|
|
|
|
addAttributes(exchange, request); |
|
|
|
|
return this.routerFunction.route(request) |
|
|
|
|
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND))) |
|
|
|
|
.switchIfEmpty(createNotFoundError()) |
|
|
|
|
.flatMap(handlerFunction -> wrapException(() -> handlerFunction.handle(request))) |
|
|
|
|
.flatMap(response -> wrapException(() -> response.writeTo(exchange, |
|
|
|
|
new HandlerStrategiesResponseContext(this.strategies)))); |
|
|
|
@ -1260,6 +1260,11 @@ public abstract class RouterFunctions {
@@ -1260,6 +1260,11 @@ public abstract class RouterFunctions {
|
|
|
|
|
attributes.put(REQUEST_ATTRIBUTE, request); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private <R> Mono<R> createNotFoundError() { |
|
|
|
|
return Mono.defer(() -> Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND, |
|
|
|
|
"No matching router function"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static <T> Mono<T> wrapException(Supplier<Mono<T>> supplier) { |
|
|
|
|
try { |
|
|
|
|
return supplier.get(); |
|
|
|
|