Un guide de RESTEasy

1. Introduction

JAX-RS (API Java pour les services Web RESTful) est un ensemble d'API Java qui prend en charge la création d' API REST . Et le framework fait bon usage des annotations pour simplifier le développement et le déploiement de ces API.

Dans ce tutoriel, nous utiliserons RESTEasy, le JBoss a fourni une implémentation portable de la spécification JAX-RS, afin de créer de simples services Web RESTful.

2. Configuration du projet

Nous allons deux envisager deux scénarios possibles:

  • Configuration autonome - conçue pour fonctionner sur tous les serveurs d'applications
  • Configuration de JBoss AS - à considérer uniquement pour le déploiement dans JBoss AS

2.1. Configuration autonome

Commençons par utiliser JBoss WildFly 10 avec une configuration autonome.

JBoss WildFly 10 est livré avec RESTEasy version 3.0.11, mais comme vous le verrez, nous allons configurer le pom.xml avec la nouvelle version 3.0.14.

Et grâce au resteasy-servlet-initializer , RESTEasy fournit une intégration avec des conteneurs Servlet 3.0 autonomes via l' interface d'intégration ServletContainerInitializer .

Jetons un œil au pom.xml :

 3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer ${resteasy.version} org.jboss.resteasy resteasy-client ${resteasy.version} 

jboss-deployment-structure.xml

Dans JBoss, tout ce qui est déployé en tant que WAR, JAR ou EAR est un module. Ces modules sont appelés modules dynamiques .

A côté de ceux-ci, il y a aussi des modules statiques dans $ JBOSS_HOME / modules . Comme JBoss a les modules statiques RESTEasy - pour un déploiement autonome, le fichier jboss-deployment-structure.xml est obligatoire afin d'exclure certains d'entre eux.

De cette façon, toutes les classes et tous les fichiers JAR contenus dans notre WAR seront chargés:

2.2. JBoss comme configuration

Si vous allez exécuter RESTEasy avec JBoss version 6 ou supérieure, vous pouvez choisir d'adopter les bibliothèques déjà intégrées dans le serveur d'application, simplifiant ainsi le pom:

 org.jboss.resteasy resteasy-jaxrs ${resteasy.version} 

Notez que jboss-deployment-structure.xml n'est plus nécessaire.

3. Code côté serveur

3.1. Servlet version 3 web.xml

Jetons maintenant un coup d'œil au web.xml de notre projet simple ici:

 RestEasy Example resteasy.servlet.mapping.prefix /rest 

resteasy.servlet.mapping.prefix est nécessaire uniquement si vous souhaitez ajouter un chemin d'accès relatif à l'application API.

À ce stade, il est très important de noter que nous avons déclaré aucun Servlet dans le web.xml parce resteasy servlet-initialiseur a été ajouté en tant que dépendance pom.xml . La raison en est que RESTEasy fournit la classe org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer qui implémente javax.server.ServletContainerInitializer .

ServletContainerInitializer est un initialiseur et il est exécuté avant que tout contexte de servlet ne soit prêt - vous pouvez utiliser cet initialiseur pour définir des servlets, des filtres ou des écouteurs pour votre application.

3.2. La classe d'application

La classe javax.ws.rs.core.Application est une classe JAX-RS standard que vous pouvez implémenter pour fournir des informations sur votre déploiement:

@ApplicationPath("/rest") public class RestEasyServices extends Application { private Set singletons = new HashSet(); public RestEasyServices() { singletons.add(new MovieCrudService()); } @Override public Set getSingletons() { return singletons; } }

Comme vous pouvez le voir, il s'agit simplement d'une classe répertoriant toutes les ressources et fournisseurs racine JAX-RS, et elle est annotée avec l' annotation @ApplicationPath .

Si vous renvoyez un ensemble vide pour les classes et les singletons, le WAR sera analysé pour la ressource d'annotation JAX-RS et les classes de fournisseur.

3.3. Une classe d'implémentation de services

Enfin, voyons une définition d'API réelle ici:

@Path("/movies") public class MovieCrudService { private Map inventory = new HashMap(); @GET @Path("/getinfo") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) { if (inventory.containsKey(imdbId)) { return inventory.get(imdbId); } else { return null; } } @POST @Path("/addmovie") @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response addMovie(Movie movie) { if (null != inventory.get(movie.getImdbId())) { return Response .status(Response.Status.NOT_MODIFIED) .entity("Movie is Already in the database.").build(); } inventory.put(movie.getImdbId(), movie); return Response.status(Response.Status.CREATED).build(); } }

4. Conclusions

Dans ce tutoriel rapide, nous avons présenté RESTEasy et nous avons construit une API super simple avec.

L'exemple utilisé dans cet article est disponible en tant qu'exemple de projet dans GitHub.