top / index / prev / next / target / source

2016-12-13 diary: [Java][Jersey] Java で JSON 戻しサンプル (GET)

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

[Java][Jersey] Java で JSON 戻しサンプル (GET)

Jersey および Jackson ベースによるシンプルサンプル。

import java.net.URI;
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 Main {
  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();
    }
  }
}

色々調べてみましたが、結局のところは自力で Response をハンドリングするのが最も安全で応用力も高いことがわかりました。

関連する日記

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

登場キーワード


この日記について