リクエストをリダイレクトするために「WebApplicationException」を使用することはお勧めできません。ジャージー(2.4.1)では、通常のサーブレットの方法(request.getServletContext()。getRequestDispatcher()。forward()または単にresponse.sendRedirect())を介して要求をリダイレクトできるはずです。
以下は、Jerseyがリクエストを処理する方法です
org.glassfish.jersey.servlet.ServletContainer.service(HttpServletRequest request, HttpServletResponse response)
requestScope.runInScope
final ContainerResponse response = endpoint.apply(data)
methodHandler.invoke(resource, method, args);
Responder.process(ContainerResponse);
そのmethodHandlerはRESTサービスクラスであり、methodはそのサービスクラスの関数です。
ページをリダイレクトする手順は簡単になります
クラスフィールドまたは関数パラメーターでジャージーインジェクション(@Context HttpServletRequestリクエスト、@ Context HttpServletResponseレスポンス)を介して(リクエスト、レスポンス)を取得します
request.getServletContext()。getRequestDispatcher()を呼び出して、「転送」用のディスパッチャーを取得するか、Response.sendRedirect(url)を使用します
アプリケーションが返されると(nullのみ)、Jerseyは結果を「Responder.process(ContainerResponse)」で処理しようとします。このステップでは、応答を使用してステータスを設定します(204 nullリターンの内容はありません)。
したがって、ここで重要な点は、サービス関数から戻る前に応答オブジェクトをファイナライズ/クローズする必要があるということです。そうしないと、Jerseyが出力を上書きする可能性があります。
「WebApplicationException」がJerseyの応答を上書きする理由に関する小さなヒント。これは、org.glassfish.jersey.server.ServerRuntime.mapException()が応答結果として「webApplicationException.getResponse()」を使用するためです。