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.
- 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.
- 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!".
- 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 objecteUser
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 objecteUser
.createUser()
: Mètode que rep un objecteUser
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 objecteUser
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
- Crea una classe
Product
amb els atributsid
,name
iprice
. - 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
- Què és Spring Boot?
- Configuració del teu entorn de desenvolupament
- Creant la teva primera aplicació Spring Boot
- Entenent l'estructura del projecte Spring Boot
Mòdul 2: Conceptes bàsics de Spring Boot
- Anotacions de Spring Boot
- Injecció de dependències a Spring Boot
- Configuració de Spring Boot
- Propietats de Spring Boot
Mòdul 3: Construint serveis web RESTful
- Introducció als serveis web RESTful
- Creant controladors REST
- Gestionant mètodes HTTP
- Gestió d'excepcions en REST
Mòdul 4: Accés a dades amb Spring Boot
- Introducció a Spring Data JPA
- Configuració de fonts de dades
- Creant entitats JPA
- Utilitzant repositoris de Spring Data
- Mètodes de consulta a Spring Data JPA
Mòdul 5: Seguretat a Spring Boot
- Introducció a Spring Security
- Configuració de Spring Security
- Autenticació i autorització d'usuaris
- Implementant autenticació JWT
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ó
- Optimització del rendiment
- Monitorització amb Spring Boot Actuator
- Utilitzant Prometheus i Grafana
- Gestió de registres i logs