JAX-RS(Jersey)での実装に関して
前回は、XMLから自動生成することに書いたので、今度は、実際の実装に関して書きたいと思います。
Jerseyは、URLをアノテーションでマッピングします。
1つのJavaクラスを複数のURLへマッピングできます。
例えば、下記のURLサービスにアクセスするとします。
http://localhost/MessageResource_1_0/MessageResource/service/getMessageByMessageId?messageId=100
その場合、
「/service」は、クラス自体に対してのマッピングなので、下記の様にクラスに@Path("service")と、アノテーションで記述します。
@Path("service") public class MessageResource { }
「/getMessageByMessageId」は、メソッドに対してのマッピングなので、下記の様に@Path(value="getMessageByMessageId")と、アノテーションで記述します。
@Path(value="/getMessageByMessageId") public MessageResponse getMessageByMessageId() { }
また、GETかPOSTでのリクエストかをメソッドに対して@GETや@POSTなどアノテーションで記述することもできます。
GETの場合は、下記の様に@GETをメソッドに対して記述します。
@GET @Path(value="/getMessageByMessageId") public MessageResponse getMessageByMessageId() { }
レスポンスの形式に関してもアノテーションで記述することになります。
XML形式の場合は、下記の様に記述します。
@GET @Path(value="/getMessageByMessageId") @Produces(MediaType.TEXT_XML) public MessageResponse getMessageByMessageId() { }
受け取るパラメータもアノテーションで、記述することができます。
@QueryParam("messageId")String messageIdと言った感じで下記の様に記述することができます。
@GET @Path(value="/getMessageByMessageId") @Produces(MediaType.TEXT_XML) public MessageResponse getMessageByMessageId(@QueryParam("messageId") String messageId) { }
最終的には、下記の様なクラスの実装になります。
package jp.co.dev.system.service; import javax.ws.rs.Get; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; @Path("/service") public class MessageResoruce { @GET @Path(value="/getMessageByMessageId") @Produces(MediaType.TEXT_XML) public MessageResponse getMessageByMessageId( @QueryParam("messageId") String messageId) throws ApplicationFaultException,SystemFaultException { MessageResponse response = null; // 何らかの処理を記述。 retrun response; } }
最後に、web.xmlファイルにJerseyの設定を行います。
サーブレットの設定と、初期パラメータとして、公開するサービスのクラスがあるパッケージを指定すれば設定は完了です。
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jp.co.dev.system.service</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/MessageResource/*</url-pattern> </servlet-mapping>