Cliente JAX-RS com Jersey
1. Visão geral
Jersey é uma estrutura de código aberto para o desenvolvimento de serviços Web RESTFul. Ele também possui excelentes recursos de cliente embutidos.
Neste tutorial rápido, exploraremos a criação do cliente JAX-RS usandoJersey 2.
Para uma discussão sobre a criação de RESTful Web Services usando Jersey, consultethis article.
Leitura adicional:
API REST com Jersey e Spring
Criando serviços da Web repousantes usando Jersey 2 e Spring.
CORS em JAX-RS
Aprenda como implementar o mecanismo de compartilhamento de recursos de origem cruzada (CORS) em aplicativos baseados em JAX-RS.
Filtros e interceptores de Jersey
Veja como os filtros e interceptores funcionam na estrutura de Jersey.
2. Dependências do Maven
Vamos começar adicionando as dependências necessárias (para o cliente Jersey JAX-RS) nopom.xml:
org.glassfish.jersey.core
jersey-client
2.25.1
Para usar o Jackson 2.x como provedor JSON:
org.glassfish.jersey.media
jersey-media-json-jackson
2.25.1
A versão mais recente dessas dependências pode ser encontrada emjersey-clientejersey-media-json-jackson.
3. Cliente RESTFul em Jersey
Iremos desenvolver um cliente JAX-RS para consumir as APIs JSON e XML REST que desenvolvemoshere (precisamos ter certeza de que o serviço está implementado e a URL está acessível).
3.1. Classe de representação de recursos
Vamos dar uma olhada na classe de representação de recursos:
@XmlRootElement
public class Employee {
private int id;
private String firstName;
// standard getters and setters
}
Anotações JAXB como@XmlRootElement são necessárias apenas se o suporte XML for necessário.
3.2. Criação de uma instância deClient
A primeira coisa que precisamos é uma instância de aClient:
Client client = ClientBuilder.newClient();
3.3. Criando umWebTarget
Assim que tivermos a instânciaClient, podemos criar umWebTarget usando o URI do recurso da web de destino:
WebTarget webTarget
= client.target("http://localhost:8082/spring-jersey");
UsandoWebTarget, podemos definir um caminho para um recurso específico:
WebTarget employeeWebTarget
= webTarget.path("resources/employees");
3.4. Construindo uma Invocação de Solicitação HTTP
Uma instância do construtor de invocação é criada com um dos métodosWebTarget.request():
Invocation.Builder invocationBuilder
= employeeWebTarget.request(MediaType.APPLICATION_JSON);
Para o formato XML,MediaType.APPLICATION_XML pode ser usado.
3.5. Invocar solicitações HTTP
Chamando HTTP GET:
Response response
= invocationBuilder.get(Employee.class);
Chamando HTTP POST:
Response response
= invocationBuilder
.post(Entity.entity(employee, MediaType.APPLICATION_JSON);
3.6. Cliente REST de amostra
Vamos começar a escrever um cliente REST simples. O métodogetJsonEmployee() recupera um objetoEmployee com base no funcionárioid. O JSON retornado porREST Web Service é desserializado para o objetoEmployee antes de retornar.
Usando a API JAX-RS fluentemente para criar um destino da web, um construtor de chamadas e uma solicitação GET HTTP:
public class RestClient {
private static final String REST_URI
= "http://localhost:8082/spring-jersey/resources/employees";
private Client client = ClientBuilder.newClient();
public Employee getJsonEmployee(int id) {
return client
.target(REST_URI)
.path(String.valueOf(id))
.request(MediaType.APPLICATION_JSON)
.get(Employee.class);
}
//...
}
Vamos agora adicionar um método para solicitação POST HTTP. O métodocreateJsonEmployee() cria umEmployee invocandoREST Web Service para a criação deEmployee. A API do cliente serializa internamente o objetoEmployee para JSON antes de invocar o método HTTP POST:
public Response createJsonEmployee(Employee emp) {
return client
.target(REST_URI)
.request(MediaType.APPLICATION_JSON)
.post(Entity.entity(emp, MediaType.APPLICATION_JSON));
}
4. Testando o cliente
Vamos testar nosso cliente com JUnit:
public class JerseyClientLiveTest {
public static final int HTTP_CREATED = 201;
private RestClient client = new RestClient();
@Test
public void givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated() {
Employee emp = new Employee(6, "Johny");
Response response = client.createJsonEmployee(emp);
assertEquals(response.getStatus(), HTTP_CREATED);
}
}
5. Conclusão
Neste artigo, apresentamos o cliente JAX-RS usando Jersey 2 e desenvolvemos um cliente Java RESTFul simples.
Como sempre, o código-fonte completo está disponível emthis Github project.