top / index / prev / next / target / source

2017-02-22 diary: [Java][Jersey][Maven] シンプル REST/JSON サンプルサーバー

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

[Java][Jersey][Maven] シンプル REST/JSON サンプルサーバー

JavaMavenJersey を使って REST/JSON 軽量サーバーを作る シンプルサンプルです。 単純な Java の main から起動可能な REST/JSON サーバーが出来上がります。

まず、2017-01-02 diary: [Maven] によるシンプル Java プロジェクトサンプルの作成手順 または同等の手順で Maven の Java プロジェクトを作成したことを前提とします。

次に Jersey 及び Jackson のライブラリ依存関係を Maven の記述ファイルである pom.xml に追記します。 <dependencies> の箇所に 必要になるライブラリを追記します。

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.ws.rs</groupId>
      <artifactId>javax.ws.rs-api</artifactId>
      <version>2.0.1</version>
    </dependency>

    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-jdk-http</artifactId>
      <version>2.24</version>
    </dependency>

    <dependency>
      <groupId>org.glassfish.jersey.core</groupId>
      <artifactId>jersey-server</artifactId>
      <version>2.24</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.6</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.6</version>
    </dependency>
  </dependencies>

mvn compile を実行して pom.xml ファイル変更結果として得られるライブラリをダウンロードします。

mvn compile

次に Java ソースコードを以下のように書き変えます。

package my.sandbox;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;

import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

import com.fasterxml.jackson.databind.ObjectMapper;

public class App {
  public static void main(final String[] args) {
    final URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();
    final ResourceConfig config = new ResourceConfig();
    config.register(Hello.class);
    JdkHttpServerFactory.createHttpServer(uri, config);

    for (;;) {
      System.out.print('.');
      try {
        Thread.sleep(10000);
      } catch (InterruptedException e) {
      }
    }
  }

  @Path("/")
  public static class Hello {
    // http://localhost:8080/person?name=Taro&age=54
    @Path("person")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response person(@QueryParam("name") @DefaultValue("TaroYamada") String name,
        @QueryParam("age") @DefaultValue("17") int age) {
      Person person = new Person();
      {
        person.age = age;
        person.name = name;

        Job job = new Job();
        job.title = "leader";
        person.jobs.add(job);
      }

      try {
        return Response.ok(new ObjectMapper().writeValueAsString(person), MediaType.APPLICATION_JSON).build();
      } catch (Exception ex) {
        ex.printStackTrace();
      } catch (Error ex) {
        ex.printStackTrace();
      }

      return Response.status(Status.BAD_REQUEST).build();
    }
  }

  static class Person {
    public int age;
    public String name;
    public List<Job> jobs = new ArrayList<Job>();
  }

  static class Job {
    public String title;
  }
}

これをコンパイルして実行すると、REST/JSON な web サーバーをすぐさま実行することができます。

mvn compile
mvn exec:java

以下のような URL で接続確認を行うことができます。

http://localhost:8080/person?name=Taro&age=54

GlassFish の中に含まれる Jersey のみを利用して REST サーバーを作ることができるこの手順は、とても便利で軽量です。

Last modified: $Date: 2017-02-22 $

登場キーワード


この日記について