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で指定する
Applicationを継承したクラスを用意し、どのリソースを使うかを定義する。
このクラスを含んだwarファイルを作ってアプリケーションサーバーにデプロイすれば、他に何も定義しなくても(少なくともGlassFishなら)このアプリケーションが使われる。
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); // 使用するリソースクラスを返す } }
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のレスポンスのデータの種類を指定する。
@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; }
リクエストとして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 〜; }