Saltar al contenido

¿Cómo configurar la aplicación JAX-RS usando solo anotaciones (sin web.xml)?

Esta es la contestación más acertada que encomtrarás aportar, pero mírala pausadamente y valora si es compatible a tu proyecto.

Solución:

** ¡POR FAVOR LEA SI UTILIZA TOMCAT O JETTY! **

La respuesta aceptada hace funciona, pero solo si la aplicación web se implementa en un servidor de aplicaciones como Glassfish o Wildfly, y posiblemente en contenedores de servlet con extensiones EE como TomEE. Eso no trabajar en contenedores de servlet estándar como Tomcat, que estoy seguro de que la mayoría de las personas que buscan una solución aquí quieren usar.

Si está utilizando una instalación estándar de Tomcat (o algún otro contenedor de servlet), debe incluir una implementación REST ya que Tomcat no viene con una. Si está utilizando Maven, agregue esto a la dependencies sección:


  
    org.glassfish.jersey.bundles
    jaxrs-ri
    2.13
  
  ...

Luego, simplemente agregue una clase de configuración de aplicación a su proyecto. Si no tiene ninguna necesidad de configuración especial además de establecer la ruta de contexto para el resto de los servicios, la clase puede estar vacía. Una vez que se agrega esta clase, no necesita configurar nada en web.xml (o tener uno):

package com.domain.mypackage;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest") // set the path to REST web services
public class ApplicationConfig extends Application 

Después de esto, declarar sus servicios web es sencillo utilizando las anotaciones JAX-RS estándar en sus clases de Java:

package com.domain.mypackage;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;

// It's good practice to include a version number in the path so you can have
// multiple versions deployed at once. That way consumers don't need to upgrade
// right away if things are working for them.
@Path("calc/1.0")
public class CalculatorV1_0 
  @GET
  @Consumes("text/plain")
  @Produces("text/plain")
  @Path("addTwoNumbers")
  public String add(@MatrixParam("firstNumber") int n1, @MatrixParam("secondNumber") int n2) 
    return String.valueOf(n1 + n2);
  

Esto debería ser todo lo que necesitas. Si su instalación de Tomcat se ejecuta localmente en el puerto 8080 e implementa su archivo WAR en el contexto myContextir a…

http://localhost:8080/myContext/rest/calc/1.0/addTwoNumbers;firstNumber=2;secondNumber=3

…debe producir el resultado esperado (5).

Parece que todo lo que necesitaba hacer es esto (Servlet 3.0 y superior)

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/*")
public class MyApplication extends Application 
    ...

Y aparentemente no se necesitaba ninguna configuración web.xml (probado en Tomcat 7)

El capítulo 2 de la especificación JAX-RS: Java™ API for RESTful Web Services describe el proceso de publicación de una aplicación JAX-RS en un entorno Servlet (sección 2.3.2 Servlet en la especificación).

Tenga en cuenta que solo se recomienda el entorno Servlet 3 (sección 2.3.2 Servlet, página 6):

Se RECOMIENDA que las implementaciones admitan el mecanismo de capacidad de conexión del marco Servlet 3 para permitir la portabilidad entre contenedores y aprovechar las funciones de escaneo de clase proporcionadas por el contenedor.

En resumen, si desea utilizar un enfoque sin web.xml, es posible con una implementación personalizada de javax.ws.rs.core.Application que registra los recursos del servicio RESTful con la anotación javax.ws.rs.ApplicationPath.

@ApplicationPath("/rest")

Aunque preguntó específicamente sobre Jersey, también puede leer el artículo Implementing RESTful services with JAX-RS and WebSphere 8.5 Liberty Profile en el que describí el proceso de publicación no-web.xml para WebSphere Liberty Profile (con Apache Wink como implementación de JAX-RS).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *