0
我試圖使用過濾器Zuul做動態路由的工作。我有一個在Spring Boot中運行的應用程序。此應用程序公開兩項服務。重定向不與Zuul春季啓動
@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過濾器,我重定向任何要求要麼/或更新/添加基於某種邏輯。
Zuul配置如下。
zuul.routes.books.url=http://localhost:8090
ribbon.eureka.enabled=false
server.port=8080
重定向是使用下面的代碼在一個延伸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
我希望它應該重定向到/更新服務的過濾器類來完成在run()
因爲類型是作爲更新傳遞的。但是我發現它是被調用的添加服務。 setRouteHost代碼正在執行,但重定向沒有發生。
有什麼我失蹤?任何指針將不勝感激。
謝謝