Outils pour utilisateurs

Outils du site


lang:java:rest

Ceci est une ancienne révision du document !


Il faut commencer par créer un projet Web Dynamic avec le support de JAX-RS (REST Web Service).

Ensuite, il faut créer le serveur en créant une classe normale. Pour Jersey, il est indispensable que le serveur soit dans un package non vide.

Dans l'exemple ci-dessous, il faut aussi pour Tomcat et le projet la librairie java-json.jar (à mettre dans le dossier WebContent/lib) qui facilitera la réponse au client.

Attention, j'ai eu personnellement beaucoup de mal à faire fonctionner REST sur Eclipse. On pense que tout est bien configurer et ça ne marche pas pendant des heures. Puis d'un coup, on a l'impression que le projet tombe en marche miraculeusement… O_o

J'ai réussi plusieurs fois à faire fonctionner REST sans que JAX-RS soit activé dans Project Facets mais jamais avec. Donc prudence. Pareil, avec @Path mais avec @ApplicationPath ça ne marche pas (oui, j'ai bien fait hérité de la classe Application).

Serveur.java
package com.llgc;
 
 
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
 
import javax.ws.rs.core.MediaType;
 
import org.json.JSONException;
import org.json.JSONObject;
 
@Path("/euro")
public class Serveur {
  // Ici, le path est cumulatif avec le "/euro".
  // On fait donc bien référence au chemin "/euro/{f}" avec {f} : un nombre flottant
  @Path("{f}")
  // Méthode GET
  @GET
  // Requête XML
  @Produces(MediaType.APPLICATION_XML)
  // Requête XML
  @Consumes(MediaType.APPLICATION_XML)
  // On dit que le f est extrait du path et que c'est un double.
  public String traitementXml(@PathParam("f") Double f) {
    return "<conversion><euros>" + f / 6.65 + "</euros><francs>" + f + "</francs></conversion>";
  }
 
  @Path("{f}")
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public String traitementJson(@PathParam("f") Double f) throws JSONException {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("Francs", f);
    jsonObject.put("Euros", f / 6.65);
    return jsonObject.toString();
  }
 
  @Path("{f}")
  @GET
  @Produces(MediaType.TEXT_HTML)
  @Consumes(MediaType.TEXT_HTML)
  public String traitementPlainHtml(@PathParam("f") Double f) throws JSONException {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("FrancsHMTLHTMLHTML", f);
    jsonObject.put("Euris", f / 6.65);
    return jsonObject.toString();
  }
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>REST</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.llgc</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/convert/*</url-pattern>
  </servlet-mapping>
</web-app>

Erreurs

javax.servlet.ServletException: Aucune classe servlet n'a été spécifiée pour la servlet JAX-RS Servlet

Il faut spécifier dans web.xml la classe Serveur :

<servlet>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
lang/java/rest.1483915555.txt.gz · Dernière modification : 2017/01/08 23:45 de root