Что такое Java Jersey Framework? Проект Джерси поддерживает API JAX-RS, который используется для создания веб-сервисов Restful на Java. Пример клиента из Джерси.
Добро пожаловать в учебник по Java-Джерси. Недавно я начал работать над проектом веб-сервиса Restful с использованием JAX-RS Jersey framework.
Что такое Java Jersey Framework?
Проект Java Jersey отслеживает API JAX-RS, который используется для создания веб-служб Restful на Java.
1. Кому следует использовать этот учебник?
Этот учебник предназначен для Java-программистов, которые заинтересованы в разработке и развертывании веб-сервисов Restful с использованием API JAX-RS и JAXB.
2. Предварительные условия
В рамках этого руководства предлагается использовать API Jersey для создания веб-служб Restful и вызова веб-службы с помощью клиентской программы Java и тестирования веб-службы с помощью этого инструмента.
Чтобы легко понять учебник, требуется базовое понимание Java, веб-служб, XML, Maven и любого сервера приложений (JBoss/Tomcat).
3. Программное обеспечение и инструменты
JDK версии 1.8.0_131
Apache Maven 3.5.3
Mac OS X 10.13.4
Кот 8.5.16
Eclipse Java EE IDE Кислород 4.7.3
Создание проекта Jersey Eclipse Maven
Создайте “Динамический веб-проект” в Eclipse, а затем преобразуйте его в проект maven. Это предоставит нам базовый проект веб-приложения на основе maven.
Я дал groupId как com.journaldev.jersey и artifactId как мой-джерси-проект но вы можете указать все, что вам нравится. Как только мы завершим разработку нашего проекта, структура проекта будет выглядеть так, как показано на рисунке ниже.
Объяснение проекта веб-службы Java Jersey Restful
1. pom.xml : Сведения о конфигурации проекта, обратите внимание на предоставленные зависимости от джерси, другие сведения являются общими для любого аналогичного проекта maven.
2. EmpRequest.java : Компонент Java для объекта запроса. Здесь важно отметить аннотацию @XmlRootElement для сопоставления класса с элементом XML.
package com.journaldev.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "empRequest")
public class EmpRequest {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3. EmpResponse.java : Компонент Java для объекта ответа.
package com.journaldev.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "empResponse")
public class EmpResponse {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4. ErrorResponse.java : Компонент Java, который будет отправлен в качестве ответа в случае исключения.
package com.journaldev.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "errorResponse")
public class ErrorResponse {
private String errorCode;
private int errorId;
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public int getErrorId() {
return errorId;
}
public void setErrorId(int errorId) {
this.errorId = errorId;
}
}
5. Исключение EmpNotFoundException.java : обычный класс исключений, создаваемый в веб-службе.
package com.journaldev.exception;
public class EmpNotFoundException extends Exception {
private static final long serialVersionUID = 4351720088030656859L;
private int errorId;
public int getErrorId() {
return errorId;
}
public EmpNotFoundException(String msg, int errorId) {
super(msg);
this.errorId = errorId;
}
public EmpNotFoundException(String msg, Throwable cause) {
super(msg, cause);
}
}
6. web.xml : Дескриптор развертывания для веб-службы. Таким образом, любой запрос с URI https://<ХОСТ>:<ПОРТ>/My-Jersey-Project/rest/* будет обработан сервлетом Jersey ServletContainer.
Значение параметра инициализации, переданное для “com.sun.jersey.config.property.packages”, определяет, в каком пакете джерси будет искать классы веб-служб. Это свойство должно указывать на ваши классы ресурсов. Он также ищет классы ресурсов в подпакетах.
My Jersey ProjectJersey REST Servicecom.sun.jersey.spi.container.servlet.ServletContainercom.sun.jersey.config.property.packagescom.journaldev1Jersey REST Service/rest/*
7. EmpRouter.java : Класс ресурсов, обрабатывающий различные виды запросов.
@Путь(“/emp”) – Все запросы с URI https://<ХОСТ>:<ПОРТ>/My-Jersey-Project/rest/emp/ будут обрабатываться этим классом ресурсов.
@Путь(“/getEmp”) – Все запросы с URI https://<ХОСТ>:<ПОРТ>/My-Jersey-Project/rest/emp/getEmp будут обработаны этим методом.
@POST – Эта аннотация определяет, что используемый метод HTTP должен быть POST. Некоторые другие возможные значения: @GET, @PUT, @DELETE
@Потребляет(тип носителя.APPLICATION_XML) – Метод принимает XML-элемент
@Производит(тип носителя.APPLICATION_XML) – Метод возвращает XML-элемент
8. EmpNotFoundExceptionMapper.java : Класс сопоставления исключений, который сопоставляет исключение EmpNotFoundException объекту ответа. Класс должен иметь аннотацию @Provider. Этот класс должен быть в пакете, предусмотренном для классов ресурсов в web.xml. Реализация метода response() генерирует объект ответа на ошибку и устанавливает его в качестве сущности в объекте ответа со статусом INTERNAL_SERVER_ERROR.
package com.journaldev.exceptionmapper;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import com.journaldev.exception.EmpNotFoundException;
import com.journaldev.model.ErrorResponse;
@Provider
public class EmpNotFoundExceptionMapper implements
ExceptionMapper {
public EmpNotFoundExceptionMapper() {
}
public Response toResponse(
EmpNotFoundException empNotFoundException) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setErrorId(empNotFoundException.getErrorId());
errorResponse.setErrorCode(empNotFoundException.getMessage());
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
errorResponse).type(
MediaType.APPLICATION_XML).build();
}
}
Наш веб-сервис готов, просто создайте его, чтобы создать файл WAR и развернуть его на сервере приложений.
Пример клиента из Джерси
Мы можем использовать клиент Джерси для вызова нашей веб-службы и получения ответа программным способом.
EmpClient.java : Это пример программы java, с помощью которой вызывается наш веб-сервис. Мы используем API клиента Jersey для вызова службы и на основе статуса ответа анализируем объект ответа в класс EmpResponse или ErrorResponse.
package com.journaldev.client;
import javax.ws.rs.core.MediaType;
import com.journaldev.model.EmpRequest;
import com.journaldev.model.EmpResponse;
import com.journaldev.model.ErrorResponse;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
public class EmpClient {
/**
* @param args
*/
public static void main(String[] args) {
String uri = "https://localhost:8080/My-Jersey-Project/rest/emp/getEmp";
EmpRequest request = new EmpRequest();
// set id as 1 for OK response
request.setId(2);
request.setName("PK");
try {
Client client = Client.create();
WebResource r = client.resource(uri);
ClientResponse response = r.type(MediaType.APPLICATION_XML).post(ClientResponse.class, request);
System.out.println(response.getStatus());
if (response.getStatus() == 200) {
EmpResponse empResponse = response.getEntity(EmpResponse.class);
System.out.println(empResponse.getId() + "::" + empResponse.getName());
} else {
ErrorResponse exc = response.getEntity(ErrorResponse.class);
System.out.println(exc.getErrorCode());
System.out.println(exc.getErrorId());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Реакция на Успех
Ответ на Ошибку
Резюме
В этом посте мы узнали, как создать веб-сервис REST с использованием API Jersey. Мы также изучили клиент Jersey, чтобы вызвать наши API REST с помощью программы java.