2017-02-16 5 views
0

私はJAX-RSExceptionMapperを使用してアプリケーションの例外をキャッチし、カスタム出力を返します。問題は、マッパーのコンテキストでは、ユーザーが入力したAcceptヘッダーがない場合、返される出力のタイプ(HTML対JSONなど)がわかりません。現在のところ、コードはUriInfoリクエストパスに基づいたひどいハックを使用して、選択されたメディアタイプを判別します。メディアタイプは、例外をスローしたメソッドの@Producesアノテーションと同じであることが理想的ですが、ExceptionMapperにそのアノテーションを取得する方法が見つかりませんでした。ExceptionMapperで例外を投げたメソッドの@Producesアノテーションを取得します。

これが可能ですか、それとも別の方法で分かりやすいメディアタイプを返すことができますか?

その他の回答:

This answer何のリクエストボディがない場合、着信要求はnullのメディアタイプを返し、そうGETリクエストのために助けにはならないhttpHeaders.getMediaTypeを()、使用して助言します。

以下はpeeskilletの回答に基づくimplementationです。

+0

何が問題なのか説明しなくても、この質問を下落させることは非常に役に立たない。私はいくつかの問題を探して質問を読んだが、それは私にとってはうまくいくようだ。 – elhefe

答えて

1

ResourceInfoをマッパーに注入できます。そこで、Methodが呼び出され、そのクラスが呼び出されます。注釈をある程度反映してチェックすることができます。

Method method = resourceInfo.getResourceMethod(); 
Class cls = resourceInfo.getResourceClass(); 
String[] mediaTypes; 
Produces produces = method.getAnnotation(Produces.class); 
if (produces == null) { 
    produces = cls.getAnnotation(Produces.class); 
} 
if (produces != null) { 
    mediaTypes = produces.value(); 
} else { 
    mediaType = defaultMediaTypes; 
} 
+0

ありがとう、私はOQへのあなたの答えに基づいて実装を追加しました。 – elhefe

関連する問題