5

Spring を使ってリアクティブ プログラミングの世界に関わりたいと思っています。私が気づいたように、それは2つの異なるパラダイムの間の選択を与えてくれます: アノテーションベース(私たち@Controllerによく知られている@RequestMapping)と反応的なもの( 「アノテーション地獄」を解決することを目的としています)。

私の問題は、典型的なリアクティブコントローラーがどのように見えるかを理解していないことです。コントローラー クラスで使用できる 3 つの概念的なインターフェイスがあります。

HandlerFunction<T>ServerRequest (1) -具体的なインスタンスを返す特定ごとにメソッドを定義し、HandlerFunction<T>これらのメソッドをルーターに登録します。右?

RouterFunction(2) および(3) -対応するFilterFunctionすべての を配置する特定の場所はありますか? または、各コントローラーで個別に行うことはできますか (以前は注釈アプローチで行っていたように)? もしそうなら、このコントローラーからこのルーター部分を適用するようにグローバルハンドラー (もしあればルーター?) に通知するにはどうすればよいですか?RequestPredicateHandlerFunction

これが、リアクティブコントローラーの「テンプレート」の見方です。

public class Controller {
    // handlers
    private HandlerFunction<ServerResponse> handleA() {
        return request -> ok().body(fromObject("a"));
    }

    // router
    public RouterFunction<?> getRouter() {
        return route(GET("/a"), handleA()).and(
               route(GET("/b"), handleB()));
    }

    // filter
    public RouterFunction<?> getFilter() {
        return route(GET("/c"), handleC()).filter((request, next) -> next.handle(request));
    }
}

そして最後に、注釈を付けずにコントローラーであると言うにはどうすればよいでしょうか?

Spring リファレンスと、公式ブログでこの問題に関連するすべての投稿を読みました。たくさんのサンプルがありますが、それらはすべて文脈から引き出されており (IMHO)、全体像を組み立てることはできません。

これらの機能間の相互作用を整理する方法について、実際の例と優れた実践例を提供していただければ幸いです。

4

2 に答える 2