Маршрут Spring Cloud Gateway на основе содержимого запроса - PullRequest
0 голосов
/ 04 марта 2020

В моем сценарии использования мне нужно проверить тело запроса (которое составляет JSON) и посмотреть, имеет ли элемент prticular определенное значение, если он имеет его, нужно перенаправить на какой-либо другой URL-адрес (все равно отличается в остальной части порта ) иначе маршрут к другому URL динамически.

До сих пор я пробовал это, но я не уверен, как передать эти URL-адреса маршрутизации динамически.

@Configuration
public class RouterConfig {

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder, UriConfiguration uriConfiguration) {
    String httpUri = "";

    return builder.routes()
        .route(p -> p
            .path("/get")
            .and()
            .readBody(String.class, body -> {
                   JSONObject obj = new JSONObject(body);
                   if(obj.getString("channelId").equals("FOOD"))
                   {
                     uriConfiguration.setUrl("http://localhost:8441/food-score/v1/getFood");
                      return true;
                    }else if(obj.getString("channelId").equals("DOG_FOOD")){
                 uriConfiguration.setUrl("http://localhost:8442/food-score/v1/getDogFood");
                  return true;
                     }
            })
            .uri(uriConfiguration.getUrl()))

        .build();
}

UriConfiguration class

@ConfigurationProperties
@Component
public class UriConfiguration {


private String url= "";

public String getUrl() {
     return url;
    }

public void setUrl(String httpbin) {
     this.url = httpbin;
}

}

, когда я запускаю код выше, он говорит schema can not be empty, но если я жестко кодирую url, он работает, как бы Я передаю свой маршрутный URL-адрес динамически.

А также, пожалуйста, предложите, является ли этот подход идеальным для производства.

И я хотел бы настроить это в .yml сам файл, есть ли способ сделать это ??

Заранее спасибо,

...