Spring云网关RouteLocator与RestController RequestMapping注释相结合
我有一个Rest控制器,它带有一个针对特定端点的@GetMappingSpring云网关RouteLocator与RestController RequestMapping注释相结合,spring,spring-boot,spring-mvc,spring-cloud,spring-cloud-gateway,Spring,Spring Boot,Spring Mvc,Spring Cloud,Spring Cloud Gateway,我有一个Rest控制器,它带有一个针对特定端点的@GetMapping @RestController public class SearchController { @GetMapping("/search") public String doSomething() { return "result"; } } 我希望GET请求由该服务处理,但要将POST请求下游到位于http://localhost:8090/api/v1/search/publi
@RestController
public class SearchController {
@GetMapping("/search")
public String doSomething() {
return "result";
}
}
我希望GET请求由该服务处理,但要将POST请求下游到位于http://localhost:8090/api/v1/search/public/search
。我的问题是,我在执行调用时得到了一个“不允许的方法”,因为我只“实现”了@GetMapping
Json响应
路由器
我怎样才能解决这个问题?
谢谢 其余控制器在网关上吗?不确定网关上是否有一个路径,其中一个方法由控制器处理,另一个由网关处理。尝试创建一个与
/search
&&GET-uri:forward:/localsearch匹配的路由,看看是否有帮助。
{
"timestamp": "2020-03-05T06:29:52.289+0000",
"path": "/search",
"status": 405,
"error": "Method Not Allowed",
"message": "Request method 'POST' not supported",
"requestId": "75005495"
}
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("as", r -> r.path("/search").and().method(HttpMethod.POST)
.filters(f -> f.rewritePath("/search", "/api/v1/search/public/search"))
.uri("http://localhost:8090"))
.build();
}