Spring を使ってリアクティブ プログラミングの世界に関わりたいと思っています。私が気づいたように、それは2つの異なるパラダイムの間の選択を与えてくれます: アノテーションベース(私たち@Controller
によく知られている@RequestMapping
)と反応的なもの( 「アノテーション地獄」を解決することを目的としています)。
私の問題は、典型的なリアクティブコントローラーがどのように見えるかを理解していないことです。コントローラー クラスで使用できる 3 つの概念的なインターフェイスがあります。
HandlerFunction<T>
ServerRequest
(1) -具体的なインスタンスを返す特定ごとにメソッドを定義し、HandlerFunction<T>
これらのメソッドをルーターに登録します。右?
RouterFunction
(2) および(3) -対応するFilterFunction
すべての を配置する特定の場所はありますか? または、各コントローラーで個別に行うことはできますか (以前は注釈アプローチで行っていたように)? もしそうなら、このコントローラーからこのルーター部分を適用するようにグローバルハンドラー (もしあればルーター?) に通知するにはどうすればよいですか?RequestPredicate
HandlerFunction
これが、リアクティブコントローラーの「テンプレート」の見方です。
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)、全体像を組み立てることはできません。
これらの機能間の相互作用を整理する方法について、実際の例と優れた実践例を提供していただければ幸いです。