質問: _ _ _
ExceptionMapper
パスの特定のサブセットに対するリクエストにのみ応答するように、Jersey リソースと を定義するにはどうすればよいですか?- 後でホストするベースパスを事前に決定することなく、これを行うにはどうすればよいですか?
war
それぞれが Web アプリの特定のベース パスのリソースを定義するライブラリを作成して単一のライブラリを作成できるようにするにはどうすればよいですか?
背景: 2 つの異なる依存関係 ( ) から 2
つの をロードする Guice + Jersey v1 webapp があります。
1 つは残りの API エンドポイントのリソースを定義し (例: ) 、もう 1 つは Web UI のリソースを定義します (例: ) 。
前者の場合、Jersey リソースをベース パス ( ) に関連付けようとしますが、後者の場合は、ベース パス ( ) に対して同等のことを行います。
どちらの依存関係も独自の Jersey を定義します。APIは JSON エラー オブジェクトで応答しますが、Web UIは Freemarker を使用して HTML 応答を生成します。ServletModule
jar
@Path("/purchases")
@Path("/payment-methods")
@Path("/")
@Path("/products")
ServletModule
"/api/"
serve("/api/*").with(GuiceContainer.class, conf);
"/"
serve("/*").with(GuiceContainer.class, conf);
ExceptionMapper
ExceptionMapper
ExceptionMapper
ただし、API と Web UI jar の両方がクラスパス上にあるこの組み合わせの結果は、両方の依存関係からの Jersey リソースが「/api/」と「/」で始まるパスを持つリクエストに応答することです。
たとえば、 の API リソースはと/purchases
のリクエストに応答します。同様に、 の Web UI リソースはとのリクエストに応答します。http://example.com/api/purchases
http://example.com/purchases
/products
http://example.com/products
http://example.com/api/products
Jersey がExceptionMapper
同じ例外タイプ (例: NotFoundException
) に対して 2 つの を認識するという事実により、要求されたパスの開始に関係なく、Jersey は 1 つだけを選択します。私の場合、 はとExceptionMapper<NotFoundException>
の両方で未知のリソース リクエストに応答します。これは、アプリのどちらの部分にとっても悪いことです。/api/
/