En aquest tema, aprendrem a crear controladors REST utilitzant Spring Boot. Els controladors REST són components essencials en una aplicació web que permeten gestionar les sol·licituds HTTP i retornar respostes adequades. A través d'aquest mòdul, veurem com definir rutes, gestionar diferents mètodes HTTP i retornar dades en format JSON.

Objectius

  • Entendre què és un controlador REST.
  • Aprendre a crear controladors REST amb Spring Boot.
  • Gestionar diferents mètodes HTTP (GET, POST, PUT, DELETE).
  • Retornar respostes en format JSON.

  1. Què és un controlador REST?

Un controlador REST és una classe en una aplicació Spring Boot que gestiona les sol·licituds HTTP entrants i retorna respostes HTTP. Utilitza anotacions per definir rutes i mètodes HTTP específics.

  1. Creant un controlador REST bàsic

2.1. Definint la classe del controlador

Primer, crearem una classe que actuarà com a controlador. Utilitzarem l'anotació @RestController per indicar que aquesta classe és un controlador REST.

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

@RestController
@RequestMapping("/api")
public class MyRestController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}

Explicació del codi

  • @RestController: Indica que aquesta classe és un controlador REST.
  • @RequestMapping("/api"): Defineix el prefix de la ruta per a tots els mètodes dins d'aquesta classe.
  • @GetMapping("/hello"): Defineix una ruta específica per a les sol·licituds GET a /api/hello.
  • sayHello(): Mètode que gestiona la sol·licitud GET i retorna una cadena de text.

2.2. Executant l'aplicació

Per executar l'aplicació, assegura't que tens configurat el teu entorn de desenvolupament i que el servidor està en funcionament. Després, pots accedir a http://localhost:8080/api/hello des del teu navegador o eines com Postman per veure la resposta "Hello, World!".

  1. Gestionant diferents mètodes HTTP

3.1. Mètode GET

El mètode GET s'utilitza per obtenir dades del servidor. Ja hem vist un exemple bàsic anteriorment. Ara, afegirem un mètode GET que retorna un objecte JSON.

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

@RestController
@RequestMapping("/api")
public class MyRestController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }

    @GetMapping("/user")
    public User getUser() {
        return new User("John", "Doe");
    }
}

class User {
    private String firstName;
    private String lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters and setters
}

Explicació del codi

  • @GetMapping("/user"): Defineix una ruta específica per a les sol·licituds GET a /api/user.
  • getUser(): Mètode que retorna un objecte User en format JSON.

3.2. Mètode POST

El mètode POST s'utilitza per enviar dades al servidor. Afegirem un mètode POST que rep un objecte JSON i el retorna.

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class MyRestController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }

    @GetMapping("/user")
    public User getUser() {
        return new User("John", "Doe");
    }

    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        // Aquí podríem guardar l'usuari a la base de dades
        return user;
    }
}

class User {
    private String firstName;
    private String lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters and setters
}

Explicació del codi

  • @PostMapping("/user"): Defineix una ruta específica per a les sol·licituds POST a /api/user.
  • @RequestBody User user: Indica que el cos de la sol·licitud conté un objecte User.
  • createUser(): Mètode que rep un objecte User i el retorna.

3.3. Mètodes PUT i DELETE

Els mètodes PUT i DELETE s'utilitzen per actualitzar i eliminar recursos, respectivament. Afegirem exemples per a aquests mètodes.

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

@RestController
@RequestMapping("/api")
public class MyRestController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }

    @GetMapping("/user")
    public User getUser() {
        return new User("John", "Doe");
    }

    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        // Aquí podríem guardar l'usuari a la base de dades
        return user;
    }

    @PutMapping("/user")
    public User updateUser(@RequestBody User user) {
        // Aquí podríem actualitzar l'usuari a la base de dades
        return user;
    }

    @DeleteMapping("/user")
    public String deleteUser() {
        // Aquí podríem eliminar l'usuari de la base de dades
        return "User deleted";
    }
}

class User {
    private String firstName;
    private String lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters and setters
}

Explicació del codi

  • @PutMapping("/user"): Defineix una ruta específica per a les sol·licituds PUT a /api/user.
  • updateUser(): Mètode que rep un objecte User i el retorna després d'actualitzar-lo.
  • @DeleteMapping("/user"): Defineix una ruta específica per a les sol·licituds DELETE a /api/user.
  • deleteUser(): Mètode que elimina un usuari i retorna un missatge de confirmació.

Exercicis pràctics

Exercici 1: Crear un controlador REST per gestionar productes

  1. Crea una classe Product amb els atributs id, name i price.
  2. Crea un controlador REST ProductController amb les següents rutes:
    • GET /api/products: Retorna una llista de productes.
    • POST /api/products: Afegeix un nou producte.
    • PUT /api/products: Actualitza un producte existent.
    • DELETE /api/products: Elimina un producte.

Solució

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

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/api")
public class ProductController {

    private List<Product> products = new ArrayList<>();

    @GetMapping("/products")
    public List<Product> getProducts() {
        return products;
    }

    @PostMapping("/products")
    public Product addProduct(@RequestBody Product product) {
        products.add(product);
        return product;
    }

    @PutMapping("/products")
    public Product updateProduct(@RequestBody Product product) {
        // Aquí podríem actualitzar el producte a la llista
        return product;
    }

    @DeleteMapping("/products")
    public String deleteProduct(@RequestBody Product product) {
        products.remove(product);
        return "Product deleted";
    }
}

class Product {
    private int id;
    private String name;
    private double price;

    public Product(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    // Getters and setters
}

Explicació del codi

  • ProductController: Controlador REST per gestionar productes.
  • getProducts(): Retorna una llista de productes.
  • addProduct(): Afegeix un nou producte a la llista.
  • updateProduct(): Actualitza un producte existent.
  • deleteProduct(): Elimina un producte de la llista.

Resum

En aquest tema, hem après a crear controladors REST utilitzant Spring Boot. Hem vist com definir rutes, gestionar diferents mètodes HTTP i retornar dades en format JSON. També hem practicat amb un exercici per gestionar productes. Amb aquests coneixements, estàs preparat per crear controladors REST més complexos i gestionar sol·licituds HTTP en les teves aplicacions Spring Boot.

Curs de Spring Boot

Mòdul 1: Introducció a Spring Boot

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

Mòdul 6: Proves a Spring Boot

Mòdul 7: Funcions avançades de Spring Boot

Mòdul 8: Desplegant aplicacions Spring Boot

Mòdul 9: Rendiment i monitorització

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats