重定向不适用于 Zuul 和 spring 引导
Redirection is not working with Zuul and 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";
}
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
重定向是在过滤器 class 中使用 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 代码,但没有发生重定向。
有什么我想念的吗?任何指针将不胜感激。
谢谢
我可以使用以下代码来实现它。
if (book.getType().equals("update")) {
context.setRouteHost(new URL("http://localhost:8090"));
context.addOriginResponseHeader("X-Zuul-Service","http://localhost:8090");
context.put("requestURI", "/update");
}
我正在尝试使用 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
重定向是在过滤器 class 中使用 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 代码,但没有发生重定向。
有什么我想念的吗?任何指针将不胜感激。
谢谢
我可以使用以下代码来实现它。
if (book.getType().equals("update")) {
context.setRouteHost(new URL("http://localhost:8090"));
context.addOriginResponseHeader("X-Zuul-Service","http://localhost:8090");
context.put("requestURI", "/update");
}