Spring Cloud Gateway RouteLocator в сочетании с аннотациями RestController RequestMapping - PullRequest
0 голосов
/ 05 марта 2020

У меня есть Rest Controller с @GetMapping для указанной конечной точки c.

@RestController
public class SearchController {

    @GetMapping("/search")
    public String doSomething() {
        return "result";
    }
}

Я хочу, чтобы эта служба обрабатывала запрос GET, но для уменьшения количества запросов POST к другой службе на http://localhost:8090/api/v1/search/public/search. У меня проблема в том, что я получаю «Метод не разрешен» при выполнении вызова, потому что я только «реализовал» @ GetMapping.

Json Ответ

 {
    "timestamp": "2020-03-05T06:29:52.289+0000",
    "path": "/search",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "Request method 'POST' not supported",
    "requestId": "75005495"
}

RouteLocator

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

Как я могу это исправить? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

есть фильтр с именем "RedirectTo". вы можете использовать как ниже;

spring:
  cloud:
    gateway:
      routes:
      - id: search_route
        predicates:
          - Path=/search
          - Method=POST
        filters:
          - RedirectTo= 302, http://localhost:8090/api/v1/search/public/search
        uri: http://localhost:8090 # not important here. i wrote because of required field.

или

spring:
  cloud:
    gateway:
      routes:
      - id: search_route
        predicates:
          - Path=/search
          - Method=POST
        filters:
          - RedirectTo= 302, /redirectMe
        uri: no://op
      - id: redirecting_route
        predicates:
          - Path=/redirectMe
        filters:
          - RewritePath=/redirectMe, /api/v1/search/public/search
        uri: http://localhost:8090

однако, если вам нужны значения тела запроса и добавить эти значения в перенаправленный запрос в качестве параметра запроса, то вам нужно написать пользовательский фильтр с использованием java dsl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...