JAX-RSとは何か?
RESTとは?
JAX-RS以前にRESTなのだが、これは何らかのAPIをウェブサービスとして実現するものだ。参考URLから例を拾ってみると、従業員を操作する場合に以下のようなhttpリクエストを送る。
検索 | GET | /employees?name={name} |
取得 | GET | /employees/{ID} |
登録 | POST | /employees |
更新 | PUT | /employees/{ID} |
削除 | DELETE | /employees/{ID} |
ただし、REST自体は応答のデータ形式を規定しているわけではなく、応答はJSONでもXMLでも良いらしい。もちろん、登録の場合には、大きなデータを送り込む必要があるわけだが、これもJSONでもXMLでも良い。
JAX-RSとは?
上記の処理を、Javaサーブレットとして処理したいわけだが、これを簡単にするための仕組みがJAX-RSであるらしい。ただし、JAX-RS自体は「仕様」であり、実際の処理はしてくれない。もちろん、Javaオブジェクト/JSON・XML変換のの仕組みも無い。
JAX-RS自体は、単純に以下のようにJavaクラスにつけるアノテーションを定義している模様だ。
@Path("employees")
public class EmployeeResource {
@GET
@Produces(....)
public List<Employee> search(@QueryParam("name") String name) {
....
}
}
JAX-RSを利用するには、例えば以下の依存をgradleに入れる。
// JAX-RSアノテーション。@GET, @POST, @Path, @PathParam, @QueryParam, など
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1.1'
Jerseyとは?
JAX-RS自体は単なる仕様であり、実装はまた別途作成する必要があるのだが、その実装の中でも「リファレンス実装」となっているのがJerseyというものだ。
※例えば、サーブレットという仕様があり、Tomcat、Glassfish、Jettyという実装があるのだが、特にTomcatがリファレンス実装となっていることと同様。
さて、jerseyにはいくつものjarライブラリがあるだが、具体的にそれらのjarの意味については探し出せなかった。何らかのサンプルを見てみると、以下が必要のようだ。
// RESTリソースに対するREST/JSONクエリを処理する。
compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet', version: '2.29'
// 2.29では不要かもしれない。
// 「java.lang.IllegalStateException: InjectionManagerFactory not found」エラーへの対処。以下を参照
// https://stackoverflow.com/a/44546979/1123654
compile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.29'
Jacksonとは?
これは単純に、Javaオブジェクト・JSON間の変換を行うライブラリでJAX-RSとは無関係だ。
最初に書いたように、JAX-RSではそのデータ形式を規定しておらず、JSON、XML、はたまた他の形式で良いことになっているのだが、ほとんどがJSONを利用しているものと思われる。
そのため、JAX-RSのリファレンス実装であるJerseyもまた、Jacksonを利用してJSON変換をするケースが多いようだ。
おそらくだが、jerseyでjacksonを使用するには、次のライブラリを追加する。
// JerseyにJacksonを使わせる
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.29'
// JAX-RSアノテーションに基づくシリアライゼーション・でシリアライゼーションのため。
// RestyGWTによってクライアント側で使用される。
// また @JsonInclude、@JsonIgnoreといったアノテーションも追加している。
compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: '2.9.9'
ディスカッション
コメント一覧
まだ、コメントがありません