2016-12-27 11 views
0

Zuulフィルタを使用して動的ルーティングを実行しようとしています。私はSpring Bootで動作するアプリケーションを持っています。このアプリケーションは2つのサービスを公開します。このアプリケーションのリダイレクトがZuulとスプリングブートで動作しない

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

Application.propertiesは私zuulフィルタにおいて

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

ですが、私は/更新または/のいずれかが何らかのロジックに基づいて、追加するすべての要求をリダイレクトしています。

ズールの構成は以下の通りです。リダイレクトが私は

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

を起動すると、私はそれが/更新サービスにリダイレクトするべき期待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; 
} 

を拡張フィルタクラスにrun()に以下のコードを使用して行われる

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

typeはupdateとして渡されるからです。しかし、私はそれが呼び出されている追加サービスであることがわかります。 setRouteHostコードが実行されていますが、リダイレクトは実行されていません。

紛失しているものがありますか?任意のポインタが評価されるだろう。

ありがとうございました

答えて

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"); 
} 
関連する問題