@Override public RouterFunctions.Builder nest(RequestPredicate predicate, Consumer<RouterFunctions.Builder> builderConsumer) { Assert.notNull(builderConsumer, "Consumer must not be null"); RouterFunctionBuilder nestedBuilder = new RouterFunctionBuilder(); builderConsumer.accept(nestedBuilder); RouterFunction<ServerResponse> nestedRoute = nestedBuilder.build(); this.routerFunctions.add(RouterFunctions.nest(predicate, nestedRoute)); return this; }
@Override public RouterFunctions.Builder HEAD(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.HEAD(pattern), handlerFunction); }
@Override public RouterFunctions.Builder after( BiFunction<ServerRequest, ServerResponse, ServerResponse> responseProcessor) { Assert.notNull(responseProcessor, "ResponseProcessor must not be null"); return filter((request, next) -> next.handle(request) .map(serverResponse -> responseProcessor.apply(request, serverResponse))); }
@Override public RouterFunctions.Builder path(String pattern, Consumer<RouterFunctions.Builder> builderConsumer) { return nest(RequestPredicates.path(pattern), builderConsumer); }
/** * Offers a discoverable way to create router functions through a builder-style interface. * @return a router function builder * @since 5.1 */ public static Builder route() { return new RouterFunctionBuilder(); }
@Override public RouterFunctions.Builder path(String pattern, Supplier<RouterFunction<ServerResponse>> routerFunctionSupplier) { return nest(RequestPredicates.path(pattern), routerFunctionSupplier); }
@Override public RouterFunctions.Builder OPTIONS(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.OPTIONS(pattern), handlerFunction); }
@Override public RouterFunctions.Builder before(Function<ServerRequest, ServerRequest> requestProcessor) { Assert.notNull(requestProcessor, "RequestProcessor must not be null"); return filter((request, next) -> next.handle(requestProcessor.apply(request))); }
@Override public RouterFunctions.Builder resources(String pattern, Resource location) { return add(RouterFunctions.resources(pattern, location)); }
@Override public RouterFunctions.Builder onError(Predicate<? super Throwable> predicate, BiFunction<? super Throwable, ServerRequest, Mono<ServerResponse>> responseProvider) { Assert.notNull(predicate, "Predicate must not be null"); Assert.notNull(responseProvider, "ResponseProvider must not be null"); return filter((request, next) -> next.handle(request) .onErrorResume(predicate, t -> responseProvider.apply(t, request))); }
@Override public RouterFunctions.Builder POST(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.POST(pattern), handlerFunction); }
@Override public <T extends Throwable> RouterFunctions.Builder onError(Class<T> exceptionType, BiFunction<? super T, ServerRequest, Mono<ServerResponse>> responseProvider) { Assert.notNull(exceptionType, "ExceptionType must not be null"); Assert.notNull(responseProvider, "ResponseProvider must not be null"); return filter((request, next) -> next.handle(request) .onErrorResume(exceptionType, t -> responseProvider.apply(t, request))); }
@Override public RouterFunctions.Builder GET(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.GET(pattern), handlerFunction); }
@Override public RouterFunctions.Builder DELETE(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.DELETE(pattern), handlerFunction); }
@Override public RouterFunctions.Builder PUT(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.PUT(pattern), handlerFunction); }
@Override public RouterFunctions.Builder PATCH(String pattern, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.PATCH(pattern), handlerFunction); }
@Override public RouterFunctions.Builder resources(Function<ServerRequest, Mono<Resource>> lookupFunction) { return add(RouterFunctions.resources(lookupFunction)); }
@Override public RouterFunctions.Builder PATCH(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.PATCH(pattern).and(predicate), handlerFunction); }
@Override public RouterFunctions.Builder GET(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.GET(pattern).and(predicate), handlerFunction); }
@Override public RouterFunctions.Builder POST(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) { return add(RequestPredicates.POST(pattern).and(predicate), handlerFunction); }