Inertia

Jersey로 rest api 서버 만들기

Jetty 를 이용해서 rest api 서버를 만들고 Jetty로 실행해 보는 코스.

Jersey 로 rest api 구현하기

아래 처럼 maven 명령을 실행하면 프로젝트 구조를 만들어 준다.

1
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes

아래와 같은 파일들이 만들어 지고 ..

1
2
3
4
5
rest/pom.xml
rest/src/main
rest/src/main/java/<your package>/MyResource.java
rest/src/main/webapp/index.jsp
rest/src/main/webapp/WEB-INF/web.xml

이 중 MyResource.java가 리소스 파일이 되는데, 리네임해서 Hello.java로 만들자. 여기에 @Path만 붙여주면 rest api 처리하는 리소스 클래스가 된다. @GET, @POST ,@PUT , @DELETE 어노테이션을 하는 것만으로 쉽게 속성을 수정할 수 있다. 더구나 @Produces 를 사용해서 POJO class를 xml 혹은 json으로 인코딩 해서 보낼 수 있다. 멋지지 않는가? (아래의 Model class는 POJO class이다. 즉, 중요하지 않다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Path("hello")
public class Hello {

static Model model;
static {
model = new Model("Darren");
model.setDesc("description");
}

@Path("/text")
@GET
public String getText(){
return model.toString();
}

@Path("/json")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJson() {
return Response.ok().entity(model).build();
}

@Path("/xml")
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getXml(){
return Response.ok().entity(model).build();
}

Jetty로 실행해 보기

앞단에서 rest api 구현은 해놨고 이것을 실행을 해야 하는데, tomcat등에 설치해서 하면 되지만 약간 무거운(?) 느낌이 있다. 그래서 light한 Jetty로 이 웹앱을 실행해 보자.

우선 jetty dependency를 pom.xml에 추가하고

1
2
3
4
5
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.v20150612</version>
</plugin>

mvn jetty:run을 실행하면 localhost:8080으로 서버를 실행한다. 그러면 직접 rest api를 call 해 볼 수 있다. jetty:run이 무엇을 하는지 궁금하다면 여기 를 보자. 내가 요약해주면 각 기본 디렉토리(src/main/webapp, classes in outdir)에 있는 파일들을 jetty로 deploy 해준다. 특정 파일에 변경이 생기면 업데이트 해주는 센스까지..

그럼 아래 url들을 차례로 브라우저에서 접근해보자. 각각 text, json, xml 포맷으로 response가 온다면 제대로 동작하고 있는 것.

Reference

실제로 동작하는 프로젝트는 github에 공유되어 있으니 참고하시면 되겠다.

revision history

  • 2015/7/14 initial draft
  • 2015/7/17 split to 2 posts. this one + swagger