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代码正在执行,但重定向没有发生。
有什么我失踪?任何指针将不胜感激。
谢谢