ClientAPIでPOSTメソッド送信

【前提条件】

[環境]

【概要】

前回は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

クライアント側にはリソースクラスで返却した文字列が、
リソース側にはクライアントクラスから送信したパラメータが出力されます。