Vamos a construir un servicio REST utilizando los estandares de JAX-RS . Para ello lo primero que tenemos que hacer es comenzar a conocer las distintas anotaciones que el estandar define.
@GET :Esta anotación marca un método y define una operación GET .Es similar a cuando realizamos una petición HTTP GET y solo debe usarse en el caso que de queramos leer información .Nunca a la hora de escribir o modificar el estado del recurso al que estemos accediendo.
@POST :Esta anotación marca un método y define una operación POST .Es similar a cuando realizamos una petición HTTP POST y se usa para añadir un recurso o modificar un recurso existente.
@DELETE :Esta anotación marca un método y define una operación DELETE .Como su nombre indica se trata de eliminar un recurso del servidor . No siempre se usa ya que redirecciona a traves de POST cuando trabajamos con HTML plano.
@PUT : Esta anotación se encargar de reemplazar un recurso del servidor y como en el caso anterior suele redireccionarse a traves de POST.
@Path :Esta anotación es distinta a las anteriores y se encarga de definir un punto de entrada al servicio. Puede usarse tanto a nivel de clase como a nivel de método.
@Produces :Esta anotación se encarga de que el contenido del servicio REST sea generado con distintos formatos.En nuestro caso usaremos JSON
Vamos a ver un ejemplo de código sencillo.
package com.arquitecturajava.serviciosexternos; import java.util.ArrayList; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MultivaluedMap; @Path("/servicioPersonas/") @Produces("application/json") public class ServicioPersonas { private static List<Persona> listaPersonas = new ArrayList<Persona>(); public ServicioPersonas() { super(); Persona yo = new Persona("pedro", "perez"); listaPersonas.add(yo); } @GET @Path("/personas") public List<Persona> getPersonas() { return listaPersonas; } @POST @Path("/personas") public void addPersona(MultivaluedMap<String, String> parametros) { Persona p = new Persona(parametros.getFirst("nombre"), parametros.getFirst("apellidos")); listaPersonas.add(p); } }
En este caso hemos utilizado un servicio REST que se encarga de mostrar las personas que tenemos almacenas en una variable “listaPersonas” que al ser estatica se mantiene en memoria. Por lo tanto definir un método GET es suficiente para acceder a la información. Este método se apoya en la anotación @Produces para generar información en formato JSON.
Una vez hemos invocado la primera vez al servicio via URL podemos usar un formulario HTML para invocar al metodo /personaa pasando los parametros por POST y añadiendo nuevas personas a la lista
<html> <body> <form method="POST" action="rest/servicioPersonas/personas"> <input type="text" name="nombre"/> <input type="text" name="apellidos"/> <input type="submit"/> </form> </body> </html>
Realizada esta operación la lista de personas queda modificada.
Aunque el ejemplo es muy sencillo muchas veces es mas complicado configurar algún framework para que pueda construir estos servicios .En el siguiente POST hablaremos de como configurar Apache CXF para que este servicio REST funcione sin problemas.
[…] artículos relacionados: Servicios REST , JAX-RS , Introducción a […]
[…] Otros artículos relacionados: Servicios REST , Utilizando JAX-RS […]
[…] artículos relacionados: JAX-RS , Spring Responsabilidades, Spring […]
[…] https://www.arquitecturajava.com/jax-rs-servicios-restfull-en-java/ […]
Hola cecilio, tengo una duda, supongamos que ese arreglo no lo creemos por defecto sino que hagamos una peticion a un servidor y el me responda la informacion en formato json. como haria para coger esa informacion y posteriormente almacenarla en un array y tratarla como lo haces?
podrias usar la libreria GSON para solventarlo dos artítulos del blog tratan de ella 🙂
Hola Cecilio, estoy intntando realizar tu ejemplo pero no consigo que llegue al servicio Rest, no encuentra el recurso. Entiendo que porque en el web.xml no he declarado nada. ¿Es asi?. ¿Debo poner algo en el web.xml?
Si configurar un framework REST para la aplicación . Uno de los post anteriores lo explica https://www.arquitecturajava.com/apache-cxf-y-rest/
Pero el link que indicas es cuando usas cxf y en este caso usas ws por lo que el otro ejemplo no vale al ser diferentes librerias
Saludos
no te he entendido
Gracias por el post, voy a leer el siguiente.