ConsumesアノテーションとProducesアノテーションをそれぞれ使用することで,WebリソースでサポートするMIMEメディアタイプを指定できます。ConsumesアノテーションとProducesアノテーションを使用していない場合は,すべてのメディアタイプがサポートされていると見されます。
ConsumesアノテーションとProducesアノテーションは,次に示す場所で使用できます。
メソッドレベルで使用されているアノテーションは,クラスレベルで使用されているアノテーションより優先されます。
二つ以上のリソースメソッドまたはサブリソースメソッドが同じMIMEメディアタイプを処理できる場合で,要求メソッド識別子やパスなどほかの情報も一致するようなとき,エラーが発生します(KDJJ10006-E)。ルートリソースクラスでは,HTTPステータスコード500のHTTPレスポンスが返されます。サブリソースクラスでは,例外マッピングプロバイダで処理できるjava.lang.RuntimeExceptionがスローされます。
HTTPリクエストのContent-Typeヘッダが,どのConsumesアノテーションにも一致しない場合,エラーとなり(KDJJ10040-E),HTTPステータスコードに415が設定された,例外マッピングプロバイダで処理できるjavax.ws.rs.WebApplicationException がスローされます。
HTTPレスポンスのAccept HTTPヘッダが,どのProducesアノテーションにも一致しない場合,エラーとなり(KDJJ10041-E),HTTPステータスコードに406が設定された,例外マッピングプロバイダで処理できるjavax.ws.rs.WebApplicationException がスローされます。
メディアタイプ宣言の例を次に示します。
package com.sample.resources; |
この例では,MIMEメディアタイプimage/jpegのHTTPレスポンスを要求するHTTP GETリクエストを処理するためにリソースメソッドgetAsImage()が呼び出されます。
また,MIMEメディアタイプtext/htmlのHTTPレスポンスを要求するHTTP GETリクエストを処理するためにリソースメソッドgetAsHtmlが呼び出されます。
さらに,MIMEメディアタイプimage/jpegのエンティティボディを持つHTTP POST要求を処理するためにリソースメソッドaddImageが呼び出されます。