springboot webflux 过滤器(RouterFunction实现)
************************
相关类与接口
HandlerFiterFunction
@FunctionalInterface
public interface HandlerFilterFunction<T extends ServerResponse, R extends ServerResponse> {
Mono<R> filter(ServerRequest var1, HandlerFunction<T> var2);
default HandlerFilterFunction<T, R> andThen(HandlerFilterFunction<T, T> after) {
Assert.notNull(after, "HandlerFilterFunction must not be null");
return (request, next) -> {
HandlerFunction<T> nextHandler = (handlerRequest) -> {
return after.filter(handlerRequest, next);
};
return this.filter(request, nextHandler);
};
}
default HandlerFunction<R> apply(HandlerFunction<T> handler) {
Assert.notNull(handler, "HandlerFunction must not be null");
return (request) -> {
return this.filter(request, handler);
};
}
static HandlerFilterFunction<?, ?> ofRequestProcessor(Function<ServerRequest, Mono<ServerRequest>> requestProcessor) {
Assert.notNull(requestProcessor, "Function must not be null");
return (request, next) -> {
Mono var10000 = (Mono)requestProcessor.apply(request);
next.getClass();
return var10000.flatMap(next::handle);
};
}
static <T extends ServerResponse, R extends ServerResponse> HandlerFilterFunction<T, R> ofResponseProcessor(Function<T, Mono<R>> responseProcessor) {
Assert.notNull(responseProcessor, "Function must not be null");
return (request, next) -> {
return next.handle(request).flatMap(responseProcessor);
};
}
}
HandlerFunction
@FunctionalInterface
public interface HandlerFunction<T extends ServerResponse> {
Mono<T> handle(ServerRequest var1);
}
************************
示例
*********************
config 层
CustomRouterConfig
@Configuration
public class CustomRouterConfig {
@Bean
public RouterFunction<ServerResponse> initRouterFunction(){
return RouterFunctions.route()
.GET("/test/**",serverRequest -> {
System.out.println("path:"+serverRequest.exchange().getRequest().getPath().pathWithinApplication().value());
return ServerResponse.ok().bodyValue("hello world");
})
.filter((serverRequest, handlerFunction) -> {
System.out.println("custom filter");
return handlerFunction.handle(serverRequest);
})
.build();
}
}
************************
使用测试
localhost:8080/test/text,控制台输出:
2020-06-21 15:18:08.005 INFO 16336 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080
2020-06-21 15:18:08.018 INFO 16336 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.807 seconds (JVM running for 2.641)
custom filter
path:/test/text
本文详细介绍了SpringBoot中WebFlux的RouterFunction实现方式,包括HandlerFilterFunction与HandlerFunction的使用。通过示例展示了如何在config层配置自定义路由及过滤器,实现对请求路径的匹配和处理。
1979

被折叠的 条评论
为什么被折叠?



