ClientAPIでPOSTメソッド送信
【前提条件】
[参考資料]
JavaEE7 JavaDoc
Java(TM) EE 7 Specification APIs
JAX-RS2.0 仕様書
The Java Community Process(SM) Program - communityprocess - final
【概要】
前回はClientAPIでGETメソッドを実行していました。
今回はPOSTメソッドを利用します。
【クライアントクラス】
import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Form; public class PostClient { public static void main(final String[] args) { final Client client = ClientBuilder.newClient(); final WebTarget target = client.target("http://localhost:8080/JAX-RS/service/PostClient"); final Invocation.Builder builder = target.request(); final Form form = new Form(); form.param("firstName", "Post firstName value"); form.param("lastName", "Post lastName value"); final String returnValue = builder.post(Entity.form(form), String.class); System.out.println(returnValue); } }
フォームのパラメータを送信するには
javax.ws.rs.core.Formクラスを使用します。
Form#paramメソッドにパラメータ名、パラメータ値を設定します。
POSTメソッドを実行するにはInvocation.Builder#postメソッドを使用します。
Invocation.Builder#postメソッドには送信するパラメータと
リソースクラスから返却される型を指定します。
Invocation.Builder#postメソッドはjavax.ws.rs.client.Entityクラスの
オブジェクトが必要になります。
Entityクラスを返却するメソッドは同クラスのstaticメソッドとして定義されています。
今回のサンプルではEntity#formメソッドを使用しています。
【リソースクラス】
import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/PostClient") public class PostClientResource { @POST public Response registerUser(@FormParam("firstName") final String firstName, @FormParam("lastName") final String lastName) { System.out.println("firstName : " + firstName); System.out.println("lastName : " + lastName); return Response.ok("Register is complete.").build(); } }
リソースクラスはFormParamを受け取るクラスです。
【実行結果】
[クライアント]
Register is complete.
[リソース]
firstName : Post firstName value lastName : Post lastName value
クライアント側にはリソースクラスで返却した文字列が、
リソース側にはクライアントクラスから送信したパラメータが出力されます。