springboot-version <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.3</version> </parent>

usage:

@Bean
public RouterFunction<ServerResponse> timeRouter(ApiRouter apiRouter) {
        return route().add(apiRouter).filter(new ApiPathHandlerFilterFunction()).build();
    }

@Service
public class ApiRouter implements RouterFunction<ServerResponse> {
    private final SimpleInvokeHandler simpleInvokeHandler;

    public ApiRouter(SimpleInvokeHandler simpleInvokeHandler) {
        this.simpleInvokeHandler = simpleInvokeHandler;
    }

    @Override
    public Mono<HandlerFunction<ServerResponse>> route(ServerRequest request) {
        return Mono.just(simpleInvokeHandler);
    }
}
@Slf4j
@Order(-1)
public class SimpleInvokeHandler implements HandlerFunction<ServerResponse> {
    @Override
    public Mono<ServerResponse> handle(ServerRequest request) {
        return ServerResponse.ok().bodyValue("hello");
    }
}
@Slf4j
@Service
public class ApiPathHandlerFilterFunction implements HandlerFilterFunction<ServerResponse, ServerResponse> {

    @Override
    public Mono<ServerResponse> filter(ServerRequest request, HandlerFunction<ServerResponse> next) {
        String originRequestUrl = request.path();
        log.info("originRequestUrl:{}",originRequestUrl);
        return next.handle(request);
    }
}

question: the RouterFunction be add twice,the HandlerFilterFunction will not be called,unless assign Order Spring webFlux cause multiple RouterFunction

Comment From: tangyaya8

this can resovle problem

@Bean()
    public RouterFunction<ServerResponse> timeRouter(ApiRouter apiRouter, ApiPathHandlerFilterFunction apiPathHandlerFilterFunction) {
        return RouterFunctions.route().filter(apiPathHandlerFilterFunction).add(apiRouter::route).build();
    }

@Service
@Slf4j
public class ApiRouter {
    private final SimpleInvokeHandler simpleInvokeHandler;

    public ApiRouter(SimpleInvokeHandler simpleInvokeHandler) {
        this.simpleInvokeHandler = simpleInvokeHandler;
    }

    public Mono<HandlerFunction<ServerResponse>> route(ServerRequest request) {
        return Mono.just(simpleInvokeHandler);
    }
}