Creación de Servicio Spring REST

Hoy vamos a echarle un vistazo al procedimiento necesario para la creación en nuestra aplicación de un servicio REST basado en Spring. La forma de implementación es similar a la de un servicio RESTful estándar, pero también es cierto que tiene algunas particularidades.

 


1º) En primer lugar, para indicarle a Spring que vamos a crear un servicio REST, tendremos que usar la anotación @RestController en la clase correspondiente de nuestro proyecto ubicado en el Servidor.

Si queremos establecer algún endpoint específico para nuestro controlador, tendremos que usar la anotación @RequestMapping y, entre paréntesis, el nombre de dicho endpoint.

 

import org.springframework.web.bind.annotation.RestController;

 

 

@RestController

@RequestMapping("/conference")

public class UsuarioRestServicio {


2º) A continuación, si queremos implementar un método para una petición Get, tendremos que anotarlo con la tag @GetMapping e indicar entre paréntesis el endpoint desde el que se ejecutará la petición Get que vamos a definir.

En el ejemplo siguiente tendremos las siguientes librerías importadas:


import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;


Y la petición GET quedaría del siguiente modo:


// --------------------------------------------------

// Peticion GET

@GetMapping("/usuario")

public Usuario getUsuario(@RequestParam(value="nombre", defaultValue="Javier") String nombre,

                                @RequestParam(value="apellido", defaultValue="Sanchez") String apellido,

                                @RequestParam(value="edad", defaultValue="43") int age) {

      Usuario usuario = new Usuario();

     

      usuario.setNombre(nombre);

      usuario.setApellido(apellido);

      usuario.setEdad(edad);

     

      return usuario;

}

// --------------------------------------------------


3º) Como acabamos de ver en el ejemplo anterior, los parámetros de entrada de la petición tienen que estar definidos con la tag @RequestParam. A continuación, entre paréntesis, con value se indicará el nombre del parámetro a recibir y, de manera opcional, con defaultValue se indicará el valor por defecto de dicho parámetro (esto es, el valor del parámetro si no se recibe ningún valor en la llamada a nuestro servicio). Finalmente, también se definirá el tipo y el nombre de variable que dicho parámetro utilizará en el interior del método desarrollado.


@RequestParam(value="apellido", defaultValue="Sanchez") String apellido


⛔ El tag @RequestParam recoge el endpoint de entrada en formato "Encoded". Si quisiéramos recoger la entrada en formato "Decoded", tendríamos que usar el tag @PathVariable. Si no tenemos clara la diferencia entre ambas opciones, os pongo un ejemplito.

  • Formato Encoded
    • http://localhost:8080/api/v1/categories?id=abc
  • Formato Decoded
    • http://localhost:8080/api/v1/categories/abc


4º) Por otra parte, si queremos implementar un método para una petición Post, tendremos que anotarlo con la tag @PostMapping e indicar entre paréntesis el endpoint desde el que se ejecutará la petición Post creada.

 

// --------------------------------------------------

// Peticion POST

@PostMapping("/usuario")

public Usuario postUsuario(Usuario usuario) {

     

      System.out.println("Usuario nombre: " + usuario.getNombre());

     

      return usuario;

}

// -------------------------------------------------- 

 

👉 Para invocar a nuestros servicios REST, bastará con indicar el endpoint correspondiente en cualquiera de nuestros navegadores predeterminados (Firefox, Edge, Chrome, IceDragon o el que más nos guste).

Para ejecutar la petición GET, usamos el endpoint acabado en el mapping "/usuario":

http://localhost:7070/conference/usuario

 

El navegador nos mostrará algo así:

Como vemos, el servicio REST ha recuperado los valores dentro del método GET y posteriormente los ha enviado al navegador para su visualización.


Por otra parte, si queremos ejecutar la petición con unos valores diferentes de los generados por defecto, tendremos que especificar los parámetros correspondientes en el endpoint indicado en el navegador. Por ejemplo:

http://localhost:7070/conference/usuario?nombre=Francisco&apellido=Martinez&edad=40


La petición GET nos devolverá un objeto "Usuario" con los valores indicados.


👉 Otra forma de probar nuestros servicios REST es usando la aplicación Postman. Desde dicha herramienta, bastará con que nos creemos un nuevo Request de tipo POST con el endpoint acabado en el mapping "/usuario".

 http://localhost:7070/conference/usuario


Una vez creado el Request, en la sección BODY seleccionamos la opción FORM-DATA y procedemos a introducir los 3 parámetros requeridos por el servicio REST: nombre, apellido y edad.


A continuación, pulsamos el botón SEND y esperamos a recibir la respuesta devuelta por el método POST del servicio REST.

Comprobamos que, como respuesta, se ha recibido un objeto de tipo "Usuario" con el contenido cargado con los valores enviados inicialmente desde Postman.

 

Y en líneas generales, lo comentado nos permitiría la creación de servicios Spring Rest con los requerimientos básicos para su ejecución. Obviamente, se puede añadir complejidad adicional a los mismos, pero ya nos saldríamos de los modestos objetivos que nos hemos establecido para el presente post. En el futuro ya tendremos tiempo de ir ampliando conceptos sobre este tema...

 

Saludos.

 

Comentarios

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Creación de Webservice SOAP básico

Crear repositorio Git desde Git Bash