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

Loading…
Cancel
Save