ClientAPI事始め

【前提条件】

[環境]

【概要】

JAX-RSのClientAPIを試してみます。

【クライアントクラス】

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import jp.glory.resources.client.bean.FirstClientBean;

public class FirstClient {
    
    public static void main(final String[] args) {
        sendStringResouceRequest();
        sendBeanResouceRequest();
    }

    private static void sendStringResouceRequest() {
        final Client client = ClientBuilder.newClient();

        final WebTarget target = client.target("http://localhost:8080/JAX-RS/service/FirstClient/String");
        final Invocation.Builder builder = target.request();
        final String responseString = builder.get(String.class);
 
        System.out.println(responseString);
    }

    private static void sendBeanResouceRequest() {
        final Client client = ClientBuilder.newClient();

        final WebTarget target = client.target("http://localhost:8080/JAX-RS/service/FirstClient/Bean");
        final Invocation.Builder builder = target.request();
        final FirstClientBean responseBean = builder.get(FirstClientBean.class);
 
        System.out.println(responseBean.getFirstName());
        System.out.println(responseBean.getLastName());
    }
}

クライアントAPIを使用するにはjavax.ws.rs.client.Clientクラスのオブジェクトを作成します。
Clientクラスはjavax.ws.rs.client.ClientBuilderクラスの
newClientメソッドを使用します。

Client#targetメソッドに対象となるURLをパラメータとして渡します。
targetメソッドを実行するとjavax.ws.rs.client.WebTargetクラスのオブジェクトが返却されます。

WebTarget#requestメソッドを実行するとリクエストを作成する
javax.ws.rs.client.Invocation.Builderクラスのオブジェクトが作成されます。

Builder#getメソッドを実行するとリクエストが投げられます。
getメソッドにはレスポンスの型を指定します。

【Bean】

先ほどのサンプルでは独自に作成したFirstClientBeanクラスを
getメソッドの戻り値の型として指定しています。

独自のBeanを戻り値に指定する場合は
デフォルトコンストラクタか、パラメータが0個のコンストラクタが必要になります。

【リソースクラス】

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import jp.glory.resources.client.bean.FirstClientBean;

@Path("/FirstClient")
public class FirstClientResource {
    
    @GET
    @Path("/String")
    public Response getString() {
    
        return Response.ok("Response is returining.").build();
    }
    
    @GET
    @Path("/Bean")
    public Response getBean() {
    
        final FirstClientBean bean = new FirstClientBean();
        bean.setFirstName("firstName");
        bean.setLastName("lastName");
        return Response.ok(bean).build();
    }    
}

リソースクラスは文字列を返すものと
Beanを返却するものを作成します。

【実行結果】

クライアントのクラスを実行すると↓のような結果が出力されます。

Response is returining.
firstName
lastName

ちゃんと文字列とBeanが返却されていることがわかります。