jersey Tutorial
Inizia con la maglia
Ricerca…
Osservazioni
Questa sezione fornisce una panoramica di cosa sia la maglia e perché uno sviluppatore potrebbe volerlo utilizzare.
Dovrebbe anche menzionare eventuali soggetti di grandi dimensioni all'interno della maglia e collegarsi agli argomenti correlati. Poiché la documentazione per la maglia è nuova, potrebbe essere necessario creare versioni iniziali di tali argomenti correlati.
Installazione o configurazione
il requisito principale è che java debba essere installato nel tuo sistema. Ci sono due opzioni per impostare la maglia nell'IDE di Eclipse. Per prima cosa scarica manualmente i jersey jars da questo link. e nel progetto-> aggiungi i jar esterni puoi aggiungere queste librerie lì. [ https://jersey.java.net/download.html][1]
e la seconda opzione è tramite Maven, devi aggiungere la dipendenza Maven per i jersey jars e verrà automaticamente scaricato per te.
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.6</version>
</dependency>
Ciao esempio del mondo
questo è il semplice esempio di ottenere il messaggio di testo semplice Hello World come output sulla chiamata alla richiesta GET.
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";
}
}
è anche necessario aggiungere quanto segue nel file web.xml per configurare completamente l'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>
Dopodiché dovrai distribuirlo sul tuo server e poi aprire il seguente Url nel tuo browser per ottenere l'output. your_server_name / your_appl_name / resto / ciao.
Esempio di operazioni CRUD in Jersey
Questo esempio dimostra l'utilizzo dei metodi GET, POST, PUT e DELETE HTTP per eseguire operazioni CRUD su una risorsa REST
Sto usando il software, i framework e gli strumenti seguenti:
- Maglia 2.25.1
- JDK 1.7.x (Java 7)
- Eclipse IDE Kepler
- Apache Maven 3.3.9
- Apache Tomcat 7.x
Si prega di seguire i seguenti passaggi per la creazione dell'applicazione Jersey richiesta
Passaggio 1: Creare un nuovo progetto Maven usando l' archetipo maven-archetype-webapp in Eclipse IDE scegliendo File-> Nuovo-> Progetto Maven
Passaggio 2: aggiungi le dipendenze sottostanti nel file pom.xml del progetto.
<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>
Passaggio 3: configurazione delle risorse dell'applicazione
Creare una classe che estenda la classe org.glassfish.jersey.server.ResourceConfig e registra i componenti JAX-RS nel suo costruttore. Qui stiamo registrando tutte le risorse nel pacchetto 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");
}
}
Passaggio 4: Creare un bean Java semplice come Employee con proprietà come id e name. E sovrascrivi il metodo equals () e hashCode (). Inoltre, la classe dovrebbe avere un costruttore pubblico senza argomenti. Si prega di trovare il codice qui sotto:
Classe bean Java dipendente
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;
}
}
Alcune informazioni aggiuntive sul codice
- Le annotazioni @XmlRootElement e @XmlElement sono obbligatorie per JAXB per eseguire il marshall e annullare l'eliminazione dei messaggi di richiesta e di risposta.
Passaggio 5: creare la risorsa dipendente come indicato di seguito:
Classe di servizio 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();
}
}
Nota: Sebbene sia possibile utilizzare sia il metodo POST che PUT per la creazione e / o l'aggiornamento di una risorsa, qui restringiamo il metodo POST dall'aggiornamento di una risorsa esistente e il metodo PUT dalla creazione di una nuova risorsa. Ma per saperne di più sull'uso di questi metodi, vai a questo link
Passaggio 6: aggiungere infine la configurazione di Jersey Servlet nel file Deployment Descriptor (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>
Passaggio 7: Pulisci e crea il progetto con Maven dopo aver verificato la struttura della cartella sottostante nel progetto.
Passaggio 8: eseguire l'applicazione in Apache Tomcat.
Ora, usa un client REST come l'estensione POSTMAN in chrome o l'interfaccia utente SOAP per accedere a http: // {hostname}: {portnumber} / {projectName / applicationName} / ws / rest / employees, con il metodo HTTP appropriato e non dimenticare per aggiungere l'intestazione Accept con l' applicazione / json o application / xml come valore nella richiesta HTTP.