首页 文章

重定向不适用于Zuul和spring boot

提问于
浏览
0

我正在尝试使用Zuul过滤器来进行动态路由 . 我有一个在Spring Boot中运行的应用程序 . 此应用程序公开两个服务 .

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

此应用程序的Application.properties是

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服务,因为类型作为更新传递 . 但我发现正在调用的是添加服务 . 正在执行setRouteHost代码,但不会发生重定向 .

有什么我想念的吗?任何指针将不胜感激 .

谢谢

1 回答

  • 0

    我能够通过使用下面的代码来实现这一点 .

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

相关问题