gpt4 book ai didi

java - 响应式(Reactive) Spring Webflux REST Controller 内部重定向

转载 作者:行者123 更新时间:2023-12-02 12:58:42 25 4
gpt4 key购买 nike

我正在为 Spring React 项目创建简单的 Controller 服务器。在设置重定向到另一个位置时,我在调用 http://localhost:8080/ 时发现错误:

There was an unexpected error (type=Internal Server Error, status=500).
ModelAttributeMethodArgumentResolver does not support multi-value reactive type wrapper: interface reactor.netty.http.server.HttpServerResponse
java.lang.IllegalStateException: ModelAttributeMethodArgumentResolver does not support multi-value reactive type wrapper: interface reactor.netty.http.server.HttpServerResponse
at org.springframework.util.Assert.state(Assert.java:94)
at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.resolveArgument(ModelAttributeMethodArgumentResolver.java:112)
at org.springframework.web.reactive.result.method.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:123)
at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:190)
at org.springframework.web.reactive.result.method.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:133)
at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.lambda$handle$1(RequestMappingHandlerAdapter.java:200)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
...

这是 Controller 代码:

import reactor.core.publisher.Mono;
import reactor.netty.http.server.HttpServerResponse;

@RestController
public class BaseController {
@GetMapping("/")
public Mono<Void> indexController(HttpServerResponse response) {

return response.sendRedirect("/api/v1");
}
// ...
}

我希望它从 localhost:8080/ 重定向到 localhost:8080/api/v1。但我遇到了上述异常(exception)。

最佳答案

使用 Controller MVC 传统方法进行重定向:

import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

import java.net.URI;

@RestController
public class Controller {
@GetMapping("/")
public Mono<Void> indexController(ServerHttpResponse response) {
response.setStatusCode(HttpStatus.PERMANENT_REDIRECT);
response.getHeaders().setLocation(URI.create("/api/v1"));
return response.setComplete();
}
}

如果有人更喜欢功能性路由器/处理程序方法,可能会调查:How to redirect a request in spring webflux? .

@Bean
RouterFunction<ServerResponse> routerFunction() {
return route(GET("/"), req ->
ServerResponse.temporaryRedirect(URI.create("/api/v1"))
.build());
}

关于java - 响应式(Reactive) Spring Webflux REST Controller 内部重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57853619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com