S-JIS[2024-02-17/2024-02-22] 変更履歴

jersey-server

Jerseyのjersey-serverのメモ。


概要

jersey-serverはRESTfulなウェブサービスを構築するためのライブラリー。

jersey-serverを使うには、build.gradleのdependenciesに以下のライブラリーを指定する。

dependencies {
    compileOnly 'org.glassfish.jersey.core:jersey-server:3.1.5'
〜
}

「http://localhost:8080/base/api/resource1」でアクセスするREST APIを作る場合、
8080 … ポート番号(GlassFishの場合、ドメインで定義されている)
base … コンテキストルート(GlassFishの場合、deployの--contextrootで指定する)
api … アプリケーションクラスの@ApplicationPathで指定する
resource1 … リソースクラスの@Pathで指定する


warファイルを作る方法


アプリケーションクラスの例

Applicationを継承したクラスを用意し、どのリソースを使うかを定義する。

このクラスを含んだwarファイルを作ってアプリケーションサーバーにデプロイすれば、他に何も定義しなくても(少なくともGlassFishなら)このアプリケーションが使われる。

RestServerApp.java:

import java.util.Set;

import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
@ApplicationPath("/api")
public class RestServerApp extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        return Set.of(Resource1.class); // 使用するリソースクラスを返す
    }
}

リソースクラスの例

Resource1.java:

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";
    }
}

@PathでURLのバスを指定する。

HTTPのGETメソッドで受け取る場合は、処理するメソッドに@GETを付ける。
@ProducesでHTTPのレスポンスのデータの種類を指定する。


JSONを返す例

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

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

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

        return result;
    }

jersey-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;
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String hello(MyRequestBean parameter) {
        return 〜;
    }

jersey-clientでJSONを送信する例


Jerseyへ戻る / GlassFishへ戻る / 技術メモへ戻る
メールの送信先:ひしだま