Java の EE 環境は JakartaEE に移行しつつあるが、当然、EE の各仕様もアップデートされている。
仕様すべての特徴を理解するのは面倒だが、使う機能は限られている。
おそらく JAX-RS や JPA, CDI あたりが基本で、それらの仕様の概略が頭に入ってれば、実務的にはそうは困らないと思う。
で、JAX-RS の話。
JAX-RS は仕様なので、実際に使う際にはこれを参照した実装が必要。
実際のアプリケーションサーバーでは
WildFly・・・RestEasy
GlassFish, Payara・・・Jersey
がモジュールとして組み込まれている。
前回、Payara を取り上げたので、今回は Jersey。
現在(2022冬)の最新版は 3.1.0 だそうで、そのユーザー向けドキュメントがここにある。
気がついたことなどをいくつか。
クライアント
クライアントでの使い方。
リクエストを投げる時は Invocation で
Client client = ClientBuilder.newClient(); //client の作成
だとか
WebTarget target = client.target(uri).path(path); //target の作成
あたりは ReastEasy とさほど違わないが、実際にサーバーにリクエストを投げる時は
Invocation.Builder builder = target.request(); //リクエスト
と builder を作成してから
buider.get(); // GET メソッドの場合
buider.post(Entity.entity({json のデータ}, MediaType.APPLICATION_JSON)); // POST メソッドの場合
などとするらしい。
また、レスポンスを取り出すときは
Response response = builder.get(); //レスポンス
とするらしい。
これは知らないと使えない。
レスポンスから中身を取り出す
レスポンスから中身を取り出したいときは、多分、色々なやり方があると思うが、いきなオブジェクトマッパーを使ったりすると初心者は混乱すると思うので、まずは String で取り出すのがいいと思う。
result (String です) = response.getEntity(String.class); //なんと1行
と実に簡潔に実現できる。
あるいは、状況によっては
result (String です) = response.readEntity(String.class); //なんと1行
となる。
プロジェクト作成初期なぞ、サーバーと通信できているかどうか不安になると思うので、まずは、こういったコードで確認するのがいいと思う。
まあ、日本語は文字化けはすると思いますが。。。
JSON とか Jackson とか
一歩進む。
JSON を使う
この記事が参考になるかな。
pom.xml に何か加えよ、とあるが、これおそらく Jersey を GlassFish あたりで使う場合。
WildFly(27) だとこの指定は全く不要。
同様のコードをサーバープログラムに書いて、WildFly で稼働させ、 curl でアクセスしたら以下のように普通に動いた。
まあ、ただ、Response で返す、というのは、知識の定着によき。
Jackson JSON を使う
Jersey 公式がサンプルを提示してくれている。
しかし、これわかりにくいなあ。
Jersey や RestEasy を使うのは、特定のクラスのインスタンスを(JSON 形式で)クライアント・サーバー間でやり取りしたいってときなので、ドンピシャのサンプルという感じがしない。
RestEasy はもっと簡単だったような気がするが、はて?
→ やはり、典型的なオブジェクトをやり取りするだけだったら、変に複雑にする必要はなさそうです。
例えば、サーバーサイドから User.class の JSON 形式のオブジェクト
{"id":"123","name":"akiba taro"}
を返し、クライアントで受け取るなら、単に
user = response.readEntity(User.class);
とすればいいだけです。
もちろん、サーバー側では User で返す必要がありますが。
ところで Jackson とは?
Java 用の JSON パーサーライブラリの1つ。Java オブジェクトと JSON の相互変換とかができる。
みたいに説明されている。 まあ、そんなところでしょう。
参考:https://stackoverflow.com/questions/8520324/how-to-post-an-xml-file-using-a-jersey-client