Nous allons ici développer un webservice REST avec l'api Jersey. Le serveur est Tomcat. Le service proposé est de fournir simplement une citation. Le but est de montrer les éléments nécessaires pour faire un webservice rest avec Jersey.
Voici l'arborescence du projet complet.
Classes Citation.java:
Et le descripteur de déploiement, web.xml Voici l'arborescence du projet complet.
Classes Citation.java:
package citations.ws;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "citation")
public class Citation {
private String phrase;
public Citation() {}
@Override
public String toString() { return phrase; }
public void setPhrase(String phrase) { this.phrase= phrase; }
public String getPhrase() { return this.phrase; }
}
Classes Citations.java:package citations.ws; import java.util.Random; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.xml.bind.JAXBElement; import javax.xml.bind.annotation.XmlElementDecl; import javax.xml.namespace.QName; import com.fasterxml.jackson.databind.ObjectMapper; @Path("/") public class Citations { private String[] tabCitations = { "La paix c'est l'intervalle entre deux guerres!", "Politesse : Forme la plus acceptable de l'hypocrisie.", "Il n'y a jamais eu de bonne guerre ni de mauvaise paix.", "Qui donne ne doit jamais s'en souvenir, qui reçoit ne doit jamais l'oublier.", "Vous n'êtes pas jolie, vous êtes pire.", "Un bienfait perd sa grâce à le trop publier.", "La raison du plus fort est toujours la meilleure."}; public Citations() {} @GET @Produces({ MediaType.APPLICATION_XML }) public JAXBElement<Citation> getXml() { return toXml(createCitation()); } @GET @Produces({ MediaType.APPLICATION_JSON }) @Path("/json") public String getJson() { return toJson(createCitation()); } @GET @Produces({ MediaType.TEXT_PLAIN }) @Path("/plain") public String getPlain() { return createCitation().toString() + "\n"; } private Citation createCitation() { Citation citation = new Citation(); citation.setWords(tabCitations[new Random().nextInt(tabCitations.length)]); return citation; } @XmlElementDecl(namespace = "http://adl.citation", name = "citation") private JAXBElement<Citation> toXml(Citation citation) { return new JAXBElement<Citation>(new QName("citation"), Citation.class, citation); } private String toJson(Citation citation) { String json = ""; try { json = new ObjectMapper().writeValueAsString(citation); } catch (Exception e) { System.out.println("Erreur jackson"+e.getMessage()); } return json; } }
Classes RestfulCitation.java.
Cette classe sert a lancer le webservice. Au démarrage de l'application, le serveur va exécuter cette classe. L'annotation @ApplicationPath indique le "endpoint" du webservice.
Cette classe sert a lancer le webservice. Au démarrage de l'application, le serveur va exécuter cette classe. L'annotation @ApplicationPath indique le "endpoint" du webservice.
package citations.ws;
import java.util.Set;
import java.util.HashSet;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/citation")
public class RestfulCitation extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(Citations.class);
return set;
}
}
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>jersey</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <load-on-startup>1</load-on-startup> </servlet> </web-app>
Sous Tomcat, l'url complète sera de la forme [SERVEUR]/[CONTEXT_ROOT]/[ENDPOINT]/[SERVICE]
http://localhost:8080/CitationsWS/citation/json
Ce qui donne : {"phrase":"La paix c'est l'intervalle entre deux guerres!"}
ou
http://localhost:8080/CitationsWS/citation/plain
Qui donne ne doit jamais s'en souvenir, qui reçoit ne doit jamais l'oublier.
Aucun commentaire:
Enregistrer un commentaire