jersey저지 시작하기


비고

이 섹션에서는 저지가 무엇인지, 그리고 왜 개발자가 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.

또한 저지 안에있는 큰 주제를 언급하고 관련 주제에 링크해야합니다. 저지에 대한 설명서가 새로운 기능이므로 해당 관련 항목의 초기 버전을 만들어야 할 수도 있습니다.

Jersey의 CRUD 운영 사례

이 예제는 REST 리소스에 대해 CRUD 작업을 수행 할 때 GET, POST, PUT 및 DELETE HTTP 메서드를 사용하는 방법을 보여줍니다.

아래의 소프트웨어, 프레임 워크 및 도구를 사용하고 있습니다.

  1. 저지 2.25.1
  2. JDK 1.7.x (Java 7)
  3. Eclipse IDE Kepler
  4. Apache Maven 3.3.9
  5. Apache Tomcat 7.x

필요한 저지 응용 프로그램 만들기에 대한 아래 단계를 따르십시오.

1 단계 : Eclipse IDE에서 maven-archetype-webapp archetype을 사용하여 File-> New-> Maven Project를 선택하여 새 maven 프로젝트 만들기

2 단계 : 프로젝트의 pom.xml 파일에 아래의 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-jaxb</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>
 

3 단계 : 응용 프로그램 자원 구성

org.glassfish.jersey.server.ResourceConfig 클래스를 확장 한 클래스를 생성하고 생성자에 JAX-RS 컴포넌트를 등록하십시오. 여기에서는 com.stackoverflow.ws.rest 패키지 아래에 모든 리소스를 등록합니다.

package com.stackoverflow.ws.rest;

import org.glassfish.jersey.server.ResourceConfig;

public class MyApplication extends ResourceConfig {

    public MyApplication() {
        packages("com.stackoverflow.ws.rest");
    }    
}
 

4 단계 : id 및 name과 같은 속성을 사용하여 Employee와 같은 간단한 Java bean을 만듭니다. equals () 및 hashCode () 메서드를 재정의합니다. 또한 클래스에는 public 생성자가 없습니다. 아래 코드를 찾으십시오.

직원 Java bean 클래스

package com.stackoverflow.ws.rest.model;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Employee {

private int id;
private String name;
    
public Employee(){
    super();
}

public Employee(int id, String name) {
    super();
    this.id = id;
    this.name = name;
}

@XmlElement
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}

@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (!(obj instanceof Employee)) {
        return false;
    }
    Employee other = (Employee) obj;
    if (id != other.id) {
        return false;
    }
    if (name == null) {
        if (other.name != null) {
            return false;
        }
    } else if (!name.equals(other.name)) {
        return false;
    }
    return true;
}
}
 

코드에 대한 추가 정보

  1. @XmlRootElement 및 @XmlElement 주석은 JAXB가 요청 및 응답 메시지를 마샬링 및 언 마샬하는 데 필요합니다.

5 단계 : 아래 주어진대로 직원 자원 만들기 :

EmployeeResource 서비스 클래스

package com.stackoverflow.ws.rest;

import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;

import com.stackoverflow.ws.rest.model.Employee;

@Path("/employees")
public class EmployeeResource {

    private static Map<Integer, Employee> employeesRepository = new HashMap<Integer, Employee>();

// Read - get all the employees
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getEmployees() {
    List<Employee> employees = new ArrayList<Employee>(
            employeesRepository.values());
    GenericEntity<List<Employee>> entity = new GenericEntity<List<Employee>>(
            employees) {
    };
    return Response.ok(entity).build();
}

// Read - get an employee for the given ID
@GET
@Path("/{key}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getEmployee(@PathParam("key") int key) {

    if (employeesRepository.containsKey(key)) {

        return Response.ok(employeesRepository.get(key)).build();
    } else {

        return Response.status(404).build();
    }
}

// Create - create an employee
@POST
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response addEmployee(Employee employee, @Context UriInfo uriInfo) {

    if(employee.getId()!=0){
        
        return Response.status(400).build();
    }
    
    int createdEmployeeId = 1;
    
    if(!employeesRepository.isEmpty()){
        
        createdEmployeeId = Collections.max(employeesRepository.keySet()) + 1;
    }
    
    employee.setId(createdEmployeeId);
    employeesRepository.put(createdEmployeeId, employee);
    
    UriBuilder builder = uriInfo.getAbsolutePathBuilder();
    URI createdURI = builder.path(Integer.toString(createdEmployeeId)).build();
    return Response.created(createdURI).build();
}

// Update - updates an existing employee
@PUT
@Path("/{key}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response updateEmployee(@PathParam("key") int key, Employee employee) {

    int status = 0;

    if (employeesRepository.containsKey(key)) {
        // update employeeRepostory
        employeesRepository.put(key, employee);
        status = 204;
    } else {
        status = 404;
    }
    return Response.status(status).build();
}

// Delete - deletes an existing employee
@DELETE
@Path("/{key}")
public Response deleteEmployee(@PathParam("key") int key) {

    employeesRepository.remove(key);
    return Response.noContent().build();
}

// Delete - deletes all the employees
@DELETE
public Response deleteEmployees() {

    employeesRepository.clear();
    return Response.noContent().build();
}
}
 

참고 : POST 및 PUT 메서드를 사용하여 리소스를 만들거나 업데이트 할 수 있지만 여기서는 POST 메서드가 기존 리소스를 업데이트하고 PUT 메서드가 새 리소스를 만들지 못하도록 제한하고 있습니다. 그러나이 방법의 사용법에 대해 더 알고 싶으면이 링크 로 이동 하십시오.

6 단계 : 마지막으로 Jersey Servlet 구성을 배치 설명자 파일 (web.xml)에 추가하십시오.

<web-app>
  <display-name>Jersey 2.25.1 based REST Application</display-name>

   <servlet>
        <servlet-name>JerseyFrontController</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.stackoverflow.ws.rest.MyApplication</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>JerseyFrontController</servlet-name>
        <url-pattern>/ws/rest/*</url-pattern>
    </servlet-mapping>
</web-app>
 

7 단계 : Clean and maven은 프로젝트의 폴더 구조를 확인한 후 프로젝트를 빌드합니다.

여기에 이미지 설명을 입력하십시오.

8 단계 : Apache Tomcat에서 응용 프로그램을 실행하십시오.

이제 크롬이나 SOAP UI의 POSTMAN 확장과 같은 일부 REST 클라이언트를 사용하여 적절한 HTTP 메소드를 사용하여 http : // {hostname} : {portnumber} / {projectName / applicationName} / ws / rest / employees로 이동하고 잊지 마세요. HTTP 요청의 값으로 application / json 또는 application / xml 과 함께 Accept 헤더를 추가 하십시오 .

Hello World 예제

이것은 GET 요청을 호출 할 때 hello world 일반 텍스트 메시지를 출력으로 가져 오는 간단한 예입니다.

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType;  
@Path("/hello") 
public class HelloExample {  
   @GET 
   @Produces(MediaType.APPLICATION_TEXT) 
   public String getUsers(){ 
      return "Hello World"; 
   }  
}
 

web.xml 파일에 다음을 추가하여 api를 완전히 설정하십시오.

   <display-name>User Message</display-name> 
   <servlet> 
      <servlet-name>Jersey REST Api</servlet-name> 
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servletclass> 
      <init-param> 
         <param-name>jersey.config.server.provider.packages</param-name> 
         <param-value>your_package_name</param-value> 
      </init-param> 
   </servlet> 
   <servlet-mapping> 
      <servlet-name>Jersey REST Api</servlet-name> 
      <url-pattern>/rest/*</url-pattern> 
   </servlet-mapping>
 

그런 다음 서버에이 파일을 배포 한 다음 브라우저에서 다음 URL을 열어 출력을 얻어야합니다. your_server_name / your_appl_name / rest / hello.

설치 또는 설정

기본 요구 사항은 자바가 system.there에 설치되어야한다는 것입니다. 이클립스 IDE에서 저지를 설정하는 두 가지 옵션이 먼저 수동으로이 링크에서 저지 항아리를 다운로드합니다. 프로젝트에서 ->이 라이브러리를 추가 할 수있는 외부 항아리 추가 거기 [ https://jersey.java.net/download.html] [1 ]

두 번째 옵션은 javen jars에 대한 maven 종속성을 추가해야하는 maven을 통해 자동으로 다운로드됩니다.

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.6</version>
</dependency>