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