Spring Cloud Gateway перенаправляет только базовый путь URL-адреса

Я пытаюсь создать простой API-шлюз, используя spring-cloud-gateway. До сих пор я понял основной принцип, но я столкнулся с конкретной проблемой:

Целевой URL-адрес, на который я пересылаю свой запрос, потенциально может содержать ноль, один или несколько сегментов пути. К сожалению, эти сегменты пути игнорируются.


private final String routingTargetWithPath = "http://hapi.fhir.org/baseR4";

  @Bean
  public RouteLocator routeLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("patient", r -> r
            .path("/Patient", "/Patient/*")
            .and()
            .method(GET)
            .uri(routingTargetWithPath)
        )
        .build();
  }

Использование curl для отправки запроса на мой API-шлюз:

curl http://localhost:8080/Patient
  and accordingly
curl http://localhost:8080/Patient/2069748

Я бы предположил, что запросы будут направляться на:

http://hapi.fhir.org/baseR4/Patient
  and accordingly
http://hapi.fhir.org/baseR4/Patient/2069748

Но вместо этого они перенаправляются на:

http://hapi.fhir.org/Patient
  and accordingly
http://hapi.fhir.org/Patient/2069748

Таким образом, путь настроенного URL-адреса маршрутизации игнорируется. К сожалению, я не могу здесь вручную переписать, так как в продакшене будет настроена "routingTarget", и я не знаю, будет ли она содержать и сколько сегментов пути.

Как я могу добиться маршрутизации к полностью настроенной цели маршрутизации?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я нашел ответ: Согласно здесь намеренно игнорируется путь uri. Итак, в моем случае фильтр заданного пути решит проблему:

private final URI routingTargetWithPath = URI.create("http://hapi.fhir.org/baseR4");

  @Bean
  public RouteLocator routeLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("patient", r -> r
            .path("/Patient", "/Patient/*")
            .and()
            .method(GET)
            .filters(f -> f.prefixPath(routingTargetWithPath.getPath()))
            .uri(routingTargetWithPath)
        )
        .build();
  }

Другие вопросы по теме