問題タブ [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.

0 投票する
1 に答える
1087 参照

java - グリズリーで ExceptionMapper が機能しない

下手な英語でごめんなさい。グリズリーとジャージーを使用して Web アプリケーションを構築しています。

そして、私はこのように実装します

存在しないページにアクセスしたとき。WebApplicationException をスローすることがわかりました。したがって、デバッグして、このメソッドが呼び出されていることを発見し、上記の応答を返します。しかし、最終的に http 応答は grizzly によって作成された html ページです。私は何をすべきか

0 投票する
0 に答える
719 参照

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 に関連付けることです。しかし、私はそうする方法を見つけていません。

方法はありますか?

0 投票する
0 に答える
1349 参照

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)で次のようなチェックを行うことです。

助けてくれてありがとう

0 投票する
3 に答える
5476 参照

java - Jersey ExceptionMapperが呼び出されていません

この例外マッパーを呼び出して 404 not found 応答を返そうとしていますが、500 内部エラーが返され続けます。ジャージーのバージョンは 2.22.1 です。以下のコード スニペット。すべての助けに感謝します。

ありがとう。

例外マッパー クラス。

例外クラス。

パッケージ org.learn.rest.messengerdemo.exception;

スローするサービスクラスのメソッド。

そしてリソースクラス。

0 投票する
1 に答える
3426 参照

java - ExceptionMapper が期待どおりに機能しない

REST Web サービスに jersey を使用しています。

サービス層からオブジェクトを取得しないときはいつでも NotFoundException(Package com.sun.jersey.api) をスローして、404 応答すべてを処理しています。

例えば

この例外用に ExceptionMapper を作成しました。

}

そのため、不明なフォルダー ID をパス パラメーターとして指定すると、例外がスローされますが、NotFoundExceptionMapper のコードは呼び出されません。(マッパーでJSONで応答を返しているにもかかわらず、応答に例外メッセージが表示されますが、「プレーンテキスト」として表示されます。デバッグブレークポイントもヒットしません)。

また、URIに間違ったリソース名を入力すると、上記の例外マッパーが呼び出されますが、パスパラメーターが正しくない場合は呼び出されません。

他のすべての例外に対応するために、以下のような例外マッパーも追加しました。

上記のコードは、例外 (マップされた例外以外) がスローされるたびに呼び出され、適切な JSON 応答が得られます。

では、ここで NotFoundException の何が問題になっているのでしょうか? 私はこれについてグーグルで検索し、NotFoundException のソースも調べましたが、役立つものは何も見つかりませんでした。これについて教えてください。

0 投票する
0 に答える
827 参照

java - JAX-RS ExceptionMapper は、java.lang.Exception 以外の例外では機能しません。

JAX-RS および Jersey と一緒にスプリング ブートを使用しています。例外を適切にログに記録し、クライアントに正しい応答を返すためだけにExceptionMappers、さまざまな種類のさまざまな種類の を定義しExceptions、1 つExceptionMapperをマッパーとして定義しました。Fallback単体テスト レベルでは、すべてが正常に動作し、適切なExceptionMapperものはException

ただし、実行中のアプリケーション (Jetty に組み込まれている) では、をキャッチするフォールバック マッパーのみjava.lang.Exceptionが呼び出され、他のすべては無視されます。私はすべてに対して注釈スキャンを使用しており、FallbackExceptionMapperMyCustomExceptionMapperは両方とも同じパッケージにあり、 で注釈が付けられてい@Providerます。他の例外マッパーがMyCustomExceptionMapper動作しない理由は何ですか?

更新:例外のタイプを to から変更しましたがjava.lang.Exception、これも呼び出されません。ルート Exception ( ) 以外の例外はマッパーによってキャッチされないようです。FallbackExceptionMapperMyCustomExceptionjava.lang

Update2:@Context javax.ws.rs.ext.Providers FallbackExceptionMapper とメソッドでプロバイダーを定義することによりproviders.getExceptionMapper(MyCustomException.class)、MyCustomExceptionMapper のインスタンスを返すことがわかりますが、Jersey がそれを呼び出さない理由が不思議です! 何か案が??

0 投票する
1 に答える
668 参照

java - JAX-RS ExceptionMapper よりも CDI Interceptor を優先する方法

次のアプローチを使用してトランザクションを管理する REST Web サービスがあります。

また、次のように例外をマッピングしています。

問題は、(トランザクションが開始された後に) RuntimeException がスローされると、すぐにRuntimeExceptionMapperによってインターセプトされ、トランザクションがロールバックされないことです。

そのため、TransactionRequiredInterceptorを優先する方法が必要です。

Obs: Tomcat 8 にデプロイする必要があるため、@Transactional の使用はオプションではありません。

0 投票する
0 に答える
1298 参照

java - 例外のswagger応答を変更する方法

REST API サービスには、swagger を使用してスプリング ブートを使用しています。例外が発生した場合、swagger は次の形式で応答を返します。

詳細な応答を返す代わりに、メッセージのみを表示したい。また、サーバーは常にRuntimeException.

メッセージのみを返すようにswaggerを実現する方法。