JSF と Jersey の両方を使用した Web アプリケーションがあります。
/contextpath/rest/whatever -> Jersey
/contextpath/everythingelse -> JSF
JSF でエラー、つまり 500 内部サーバー エラーが発生した場合、web.xml の構成によりエラー ページが表示されます。
...
<error-page>
<error-code>403</error-code>
<location>forbidden.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/path/to/errorhandler.jsp</location>
</error-page>
これは、「JSF ランド」では意図したとおりに機能します。ただし、Jersey リソースが例外をスローした場合:
- ExceptionMapper (Jersey) が例外を処理し、
- エラー応答を送信します (例: 403 禁止)
- web.xml で定義されているため、obhibited.jsp ページが提供されます。
これには、obhibited.jsp を呼び出すという望ましくない副作用があり、application/json を要求するクライアントに HTML が返されます。私の最初の方法は、エラー ページ ステートメントを条件付きで記述して、残りのリソース以外でのみ開始するようにすることでしたが、これは不可能のようです。
他の提案?