問題タブ [exceptionmapper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - グリズリーで ExceptionMapper が機能しない
下手な英語でごめんなさい。グリズリーとジャージーを使用して Web アプリケーションを構築しています。
そして、私はこのように実装します
存在しないページにアクセスしたとき。WebApplicationException をスローすることがわかりました。したがって、デバッグして、このメソッドが呼び出されていることを発見し、上記の応答を返します。しかし、最終的に http 応答は grizzly によって作成された html ページです。私は何をすべきか
java - 例外の発生元に応じて、ExceptionMapper が異なる応答タイプを返すようにする
次のように動作する必要がある NotFoundExceptionMapper という ExceptionMapper があります。
このようなものが必要な理由は、私の REST 層では、クラス ClassA のすべてのメソッドが本質的にまったく同じ try & catch エラー処理を持っているため、冗長なコードが多くなるからです。クラスBも同様です。classA と ClassB の唯一の違いは、classA のメソッドは classB のメソッドとは異なる Response タイプを返す必要があることです。
ExceptionMapper は、冗長なエラー処理コードを回避する優れた方法のようです。あとは、例外の発生元 (ClassA または ClassB) を決定し、普遍的なエラー処理を実行して、適切な応答タイプを返すことだけです。
私はすでにこのための作業コードを持っていますが、これを行うためのよりエレガントな方法があるのだろうか. まだまだジャージーには慣れていないことがたくさんあるので、見落としている可能性が高いです。
コードは非常に単純で、UriInfo インジェクションを使用して例外の発生元を識別します。
私のExceptionMapper:
クラス MyResponseBuilder がすべての魔法を行います。UriInfo を分析し、適切な応答タイプを返します。
そして、それが機能している間、同じ URI で動作する複数の一致するリソースがある場合、いくつかの厄介な問題を引き起こす可能性があります。適切に処理された場合 (つまり、正しいリソースを見つけた場合) は発生しません。それでも、これが満足のいく解決策であるとは思いません。
この問題に対するより洗練された方法は、NotFoundExceptionMapper_ThatReturnsResponseTypeA を直接 ClassA に関連付け、別の NotFoundExceptionMapper_ThatReturnsResponseTypeB を ClassB に関連付けることです。しかし、私はそうする方法を見つけていません。
方法はありますか?
java - JAX-RS 例外処理と ExceptionMapper
NotFoundException 、BadRequestException、
そして、それらのそれぞれに対して、 NotFoundExceptionMapper 、 BadRequestExceptionMapper、およびGenericExceptionMapperのような独自の ExceptionMapper を実装しました。
まず、ここでの問題は、GenericExceptionMapperが期待どおりに機能せず、JAX-RS によってスローされた一般的な例外をキャッチしないことです。そのようなマッパーによってキャッチされる各例外は、 getResource() スローなどのメソッドから早期に明示的にスローされる必要があると考えているためです。いくつかの例外 {
さらに問題は、RestEasyでは例外マッパーをweb.xmに登録する必要があることです。下記参照:
定義した各カスタム ExceptionMapper を登録できない (または登録方法がわからない) ため、別の問題があります。SINGLE カスタム ExceptionMapper しか登録できません。 それらをすべて登録するにはどうすればよいですか?つまり、NotFoundExceptionMapper、BadRequestExceptionMapper などです。
したがって、各例外は Generic Exception Mapper によってのみマップされます。これが最初の問題です。
これは RESTEasy の制限ですか? いくつかのチュートリアルのジャージーでは、そのような ExceptionMappers を登録する必要性を見ていませんが、複数の例外 Mapper が存在する可能性があるかどうかもわかりません。
私の頭に浮かんだ別の解決策(回避策)は、単一の GenericExceptionMapper を持ち、メソッドtoResponse(Throwable ex)で次のようなチェックを行うことです。
助けてくれてありがとう
java - Jersey ExceptionMapperが呼び出されていません
この例外マッパーを呼び出して 404 not found 応答を返そうとしていますが、500 内部エラーが返され続けます。ジャージーのバージョンは 2.22.1 です。以下のコード スニペット。すべての助けに感謝します。
ありがとう。
例外マッパー クラス。
例外クラス。
パッケージ org.learn.rest.messengerdemo.exception;
スローするサービスクラスのメソッド。
そしてリソースクラス。
java - ExceptionMapper が期待どおりに機能しない
REST Web サービスに jersey を使用しています。
サービス層からオブジェクトを取得しないときはいつでも NotFoundException(Package com.sun.jersey.api) をスローして、404 応答すべてを処理しています。
例えば
この例外用に ExceptionMapper を作成しました。
}
そのため、不明なフォルダー ID をパス パラメーターとして指定すると、例外がスローされますが、NotFoundExceptionMapper のコードは呼び出されません。(マッパーでJSONで応答を返しているにもかかわらず、応答に例外メッセージが表示されますが、「プレーンテキスト」として表示されます。デバッグブレークポイントもヒットしません)。
また、URIに間違ったリソース名を入力すると、上記の例外マッパーが呼び出されますが、パスパラメーターが正しくない場合は呼び出されません。
他のすべての例外に対応するために、以下のような例外マッパーも追加しました。
上記のコードは、例外 (マップされた例外以外) がスローされるたびに呼び出され、適切な JSON 応答が得られます。
では、ここで NotFoundException の何が問題になっているのでしょうか? 私はこれについてグーグルで検索し、NotFoundException のソースも調べましたが、役立つものは何も見つかりませんでした。これについて教えてください。
java - JAX-RS ExceptionMapper は、java.lang.Exception 以外の例外では機能しません。
JAX-RS および Jersey と一緒にスプリング ブートを使用しています。例外を適切にログに記録し、クライアントに正しい応答を返すためだけにExceptionMappers
、さまざまな種類のさまざまな種類の を定義しExceptions
、1 つExceptionMapper
をマッパーとして定義しました。Fallback
単体テスト レベルでは、すべてが正常に動作し、適切なExceptionMapper
ものはException
、
ただし、実行中のアプリケーション (Jetty に組み込まれている) では、をキャッチするフォールバック マッパーのみjava.lang.Exception
が呼び出され、他のすべては無視されます。私はすべてに対して注釈スキャンを使用しており、FallbackExceptionMapper
とMyCustomExceptionMapper
は両方とも同じパッケージにあり、 で注釈が付けられてい@Provider
ます。他の例外マッパーがMyCustomExceptionMapper
動作しない理由は何ですか?
更新:例外のタイプを to から変更しましたがjava.lang.Exception
、これも呼び出されません。ルート Exception ( ) 以外の例外はマッパーによってキャッチされないようです。FallbackExceptionMapper
MyCustomException
java.lang
Update2:@Context javax.ws.rs.ext.Providers
FallbackExceptionMapper とメソッドでプロバイダーを定義することによりproviders.getExceptionMapper(MyCustomException.class)
、MyCustomExceptionMapper のインスタンスを返すことがわかりますが、Jersey がそれを呼び出さない理由が不思議です! 何か案が??
java - JAX-RS ExceptionMapper よりも CDI Interceptor を優先する方法
次のアプローチを使用してトランザクションを管理する REST Web サービスがあります。
また、次のように例外をマッピングしています。
問題は、(トランザクションが開始された後に) RuntimeException がスローされると、すぐにRuntimeExceptionMapperによってインターセプトされ、トランザクションがロールバックされないことです。
そのため、TransactionRequiredInterceptorを優先する方法が必要です。
Obs: Tomcat 8 にデプロイする必要があるため、@Transactional の使用はオプションではありません。
java - 例外のswagger応答を変更する方法
REST API サービスには、swagger を使用してスプリング ブートを使用しています。例外が発生した場合、swagger は次の形式で応答を返します。
詳細な応答を返す代わりに、メッセージのみを表示したい。また、サーバーは常にRuntimeException
.
メッセージのみを返すようにswaggerを実現する方法。