S-JIS[2024-03-10] 変更履歴

JAX-RS リソースクラス

JAX-RSのリソースクラスのメモ。


概要

JAX-RSでは、REST APIの処理を行うクラスをリソースと呼ぶらしい。

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/resource1")
public class Resource1 {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }
}

リソースクラスのクラス名は何でもいい。
ApplicationのgetClassesメソッドで使用するリソースクラスを指定する。

Pathアノテーションで、REST APIのURI(の末尾)を指定する。

REST APIのURIは、コンテキストルート・ApplicationPath・Pathで決まる。
コンテキストルートはAPサーバーが決める。デフォルトでは、大抵はデプロイしたwarファイルのファイル名になるようだ。(コンテキストルートの変更方法はAPサーバーによって異なる)

例えばコンテキストルートがexample、ApplicationPathが/api、Pathが/resource1の場合、REST APIのURIは「http://localhost:8080/example/api/resource1」のようになる。


REST APIの処理を行うメソッドも、メソッド名は何でもいい。
メソッドにもPathアノテーションを付けることが出来る。その場合、URI(の末尾)は「クラスに付けたPath/メソッドに付けたPath」になる。

HTTPのGETメソッドを受け取る場合はGETアノテーション、POSTメソッドを受け付ける場合はPOSTアノテーションを付ける。

メソッドの引数でHTTPリクエストのbodyを受け取る場合はConsumesアノテーションを付ける。

HTTPレスポンスのbodyの種類をProducesアノテーションで指定する。
単なる文字列を返す場合はTEXT_PLAINを指定し、メソッドの戻り値の型をStringにする。


JSONを返す例

@ProducesにAPPLICATION_JSONを指定して、処理するメソッドの戻り値の型にJavaBeansを指定すると、自動的にJSONに変換される。

public class MyResultBean {
    private String name;
    private List<String> valueList;

    〜setter/getter〜
}
    @Path("/return-json")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public MyResultBean returnJson() {
        var result = new MyResultBean();
        result.setName("hello");
        result.setValueList(List.of("value1", "value2"));

        return result;
    }

ClientでJSONを受け取る例


JSONを受け取る例

リクエストとしてJSONを受け取る場合は@POSTを使い、@ConsumesでAPPLICATION_JSONを指定する。
そして、メソッドの引数に「JSONから変換されるJavaBeans」を指定する。

public class MyRequestBean {
    private String name;
    private String value;

    〜setter/getter〜
}
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
    @Path("/json-parameter")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String jsonParameter(MyRequestBean parameter) {
        return 〜;
    }

ClientでJSONを送信する例


JSONを送受信する例

JSONを受け取る例JSONを返す例を融合するだけ。

import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
    @Path("/hello-json")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public MyResultBean helloJson(MyRequestBean parameter) {
        var result = new MyResultBean();
〜
        return result;
    }

ClientでJSONを送受信する例


JAX-RSへ戻る / Java目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま