2017-11-15 18 views
1

私は春のwebfluxでアプリケーションを作成しようとしています。しかし、私はドキュメントで見つけることができない多くのものがあります。
レスポンスの周りにラッパーを追加するWebフィルタがあります。例:後WebFilterでServerWebExchange応答の本体を変更します

{ 
    "id": 1, 
    "name": "asdf" 
} 

応答::前
REPONSE

{ 
    "status": "success", 
    "data": { 
     "id": 1, 
     "name": "asdf" 
    } 
} 

これは現時点でWebFilterです:

@Component 
public class ResponseWrapperFilter implements WebFilter { 

    @Override 
    public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) { 
     // Add wrapper to the response content... 

     return webFilterChain.filter(serverWebExchange); 
    } 
} 

しかし、私は取得する方法を見つけることができませんかレスポンスの本文を編集します。
WebFilterのレスポンス出力を変更するにはどうすればよいですか?

答えて

0

javadocに記載されているように、WebFilterは、アプリケーションにとらわれないクロスカッティングに関するものです。 WebFilters通常、要求ヘッダーを変更したり、属性を交換に追加したり、チェーンの残りの部分に委任せずに応答を完全に処理したりします。

あなたが達成しようとしていることは、容易に実行可能であるとは言えません。未処理の交換レベルでは、Flux<DataBuffer>を処理しています。これはレスポンスボディをランダムにバイトグループに分割したものです。

何らかの理由でフィルタで応答をラップし、Flux.concatを使用して、ハンドラによって書き込まれた実際の応答にデータを追加して追加することができます。しかし、エンコーディング、無限のストリームなどに関する多くの質問があります。Encoderレベルで達成する必要がある懸念事項は、特定のメディアタイプにその動作を制限する可能性があるためです。

関連する問題