![](/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.