Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring云网关RouteLocator与RestController RequestMapping注释相结合_Spring_Spring Boot_Spring Mvc_Spring Cloud_Spring Cloud Gateway - Fatal编程技术网

Spring云网关RouteLocator与RestController RequestMapping注释相结合

Spring云网关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

我有一个Rest控制器,它带有一个针对特定端点的@GetMapping

@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();
}