![](/img/trans.png)
[英]Spring Webflux Controller : Get original request object in reactive chain
[英]How to forward a request to a different rest controller with Spring Reactive and WebFlux
我正在尝试将请求从 WebFlux RestContoller 转发到不同的内部端点。
我不想向客户端发送重定向,而是让不同的 controller 处理当前请求。 请参阅下面的代码:
@RestController
public class MyController {
@PostMapping("/start")
public Mono<MyReponse> start() {
return myService.retrieveSomething().flatMap(something -> {
if(something.isBlank()){
retrun createMyResponse(); // returns Mono<MyResponse>
} else {
// forward to "/continue"
}
});
}
}
@RestController
public class MyOtherController {
@PostMapping("/continue")
public Mono<MyReponse> continue() {
// do something and return Mono<MyResponse>
}
}
使用 Spring Servlet,我会做类似的事情:
protected void start(HttpServletRequest req, HttpServletResponse resp) {
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/continue");
dispatcher.forward(req, resp);
}
是否可以在 Spring Reactive with WebFlux 中做同样的事情? 查看了官方文档,但找不到示例。 我尝试使用 DispatcherHandler、ServerWebExchange、ServerHttpRequest、ServerHttpResponse 等对象,但找不到解决方案。
您可以使用 Spring WebFlux 函数端点,它是“轻量级函数式编程 model,其中函数用于路由和处理请求”。
@Bean
RouterFunction<ServerResponse> startRoute() {
return route(POST("/start"), req -> startHandler(req));
}
@Bean
RouterFunction<ServerResponse> continueRoute() {
return route(POST("/continue"), req -> continueHandler(req));
}
Mono<ServerResponse> startHandler(ServerRequest serverRequest) {
return myService.retrieveSomething()
.flatMap(something -> {
if (something.isBlank()){
...
} else {
return continueHandler(serverRequest);
}
});
}
Mono<ServerResponse> continueHandler(ServerRequest serverRequest) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.