Перенаправление не работает с Zuul и spring boot

Я пытаюсь использовать фильтр Zuul для динамической маршрутизации. У меня есть приложение, которое работает в Spring Boot. Это приложение предоставляет две службы.

@PostMapping("/update")
public String updateBook(Book book) {
  return " Book Updated";
}
@PostMapping("/add")
public String addBook(Book book) {
  return " Book Added";
}

Приложение.свойства для этого приложения

spring.application.name=book
server.port=8090

В моем фильтре zuul я перенаправляю любой запрос на / update или / add на основе некоторой логики.

Конфигурация Zuul как ниже.

zuul.routes.books.url=http://localhost:8090
ribbon.eureka.enabled=false
server.port=8080

Редирект выполняется с использованием кода ниже run()в классе фильтров, который расширяется ZuulFilter

@Override
public Object run() {
    RequestContext context = RequestContext.getCurrentContext();
    String requestBody = CharStreams.toString(context.getRequest().getReader());
    Gson gson = new Gson();
    Book book = gson.fromJson(requestBody, Book.class);

    if (book.getType().equals("update")) {

        context.setRouteHost(new URL("http://localhost:8090/update"));
    }
    else {
        context.setRouteHost(new URL("http://localhost:8090/add"));
    }
    return null;
}

Когда я вызываю

curl -i -X POST -H "Content-Type:application/json" -d "{"id":"1", "name":"Book1", "type":"update"}" http://localhost:8080/books/add

Я ожидаю, что он должен перенаправить в / update service, так как тип передается как update. Но я вижу, что это служба add, которая вызывается. Код setRouteHost выполняется, но перенаправление не происходит.

Есть ли что-то, что я упускаю? Любые указатели будут оценены.

Спасибо

1 ответ

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

    if (book.getType().equals("update")) {
        context.setRouteHost(new URL("http://localhost:8090"));
        context.addOriginResponseHeader("X-Zuul-Service","http://localhost:8090");
        context.put("requestURI", "/update"); 
    }