Browse Source

Polish "Throw 404 ResponseStatusException when no routes found"

See gh-25358
pull/27832/head
Arjen Poutsma 3 years ago
parent
commit
b84fe99d07
  1. 7
      spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunctions.java

7
spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunctions.java

@ -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();

Loading…
Cancel
Save