JavaEE 7をやってみよう。 JAX-RS その1
むか〜し、仕事でJAX-RSを使ってWebAPIを作ったりしたことがあって、
こんなの余裕だろって思ったのだけど、
すっかり忘れてしまっていて、
初歩の初歩さえ、ままならなかった。
無念。
しかたなく、今回も1から思い出せるように、
JAX-RSのサンプルを書いてみた。
まずは、プロジェクトにJAX-RSとJAXBのファセットを追加した。
- 1. プロジェクトのプロパティからプロジェクト・ファセットを選択する。
- JAX-RSとJAXBのチェックをつける。
つづいて、Webサービスを作ってみる。
- 2. 新規ウィザードから[webサービス] - [JAX-RS Application]を選ぶ
- 3. アプリケーションの情報を入力する。
- ソースフォルダ、パッケージ、名前は、Javaクラス作成と同じ要領で入力する。
アプリケーションパスについては、RESTアプリケーションを表すURIとなるので、それを踏まえて決める。
ここではわかりやすくrestとした。 - 4. 完了ボタンを押すと、クラスが自動生成される。
package jaxrs; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/rest") public class RestApplication extends Application { }
続いて、JAX-RS Resourceを作ってみる。
ウィザードからでも作れるが、簡単なので手作りする。
とりあえず、URLを叩いたら文字列を返すようなものを作ってみる。
package jaxrs; import javax.enterprise.context.RequestScoped; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @RequestScoped @Path("ship") public class ShipResource { @GET @Produces("text/plain") public String getText() { return "This is user!"; } }
サーバーを起動し、http://localhost:8080/{アプリケーション名}/rest/shipでアクセスすると
想定通り文字列が返される。
URIの"rest"はRestApplicationクラスの@ApplicationPathで指定したものであり、
"ship"はShipResourceクラスの@Pathで指定したものとなっている。
RESTではアプリケーションクラスのアプリケーションパス+リソースクラスのパスを指定することで
メソッドの実行が可能となっている。
また、リソースクラスのメソッドに付けたアノテーションが重要。
@GETアノテーションはURIの参照がGETで行われた場合に実行する、という意味であり、
POSTの場合に実行したいならば、@POSTを用いる。
HTTPメソッドの数だけアノテーションも用意されているが、
GET, POST以外のDeleteだとかはあまり使われているのを見たことがない。
@Producesアノテーションは、メソッドの実行結果のメディアタイプを表す。
この場合は"text/plain"を指定した事でテキストでレスポンスが返されたが、
jsonで返したい場合は、"application/json"を
xmlで返したい場合は、"application/xml"を指定する事になる。
といった具合で、その2へ続く。