Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


17.1.9 メディアタイプ宣言

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;
 
java.awt.image.RenderedImage
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
 
@Path("sample")
@Produces("image/jpeg")
public class ImageBasedResource {
 
@GET
  public RenderedImage getAsImage() {
  //実装
  }
 
  @GET
  @Produces("text/html")
  public String getAsHtml() {
    //実装
  }
 
  @POST
  @Consumes("image/jpeg")
  public void addWidget(RenderedImage image) {
    //実装
  }
}

この例では,MIMEメディアタイプimage/jpegのHTTPレスポンスを要求するHTTP GETリクエストを処理するためにリソースメソッドgetAsImage()が呼び出されます。

また,MIMEメディアタイプtext/htmlのHTTPレスポンスを要求するHTTP GETリクエストを処理するためにリソースメソッドgetAsHtmlが呼び出されます。

さらに,MIMEメディアタイプimage/jpegのエンティティボディを持つHTTP POST要求を処理するためにリソースメソッドaddImageが呼び出されます。