Salta el contingut

Exercicis Guiats Progressius amb Spring Boot

Introducció

Aquesta col·lecció d'exercicis està pensada per alumnes que comencen amb Spring Boot. Cada exercici inclou instruccions detallades i codi explicat pas a pas.


Exercici 1: Crear un Projecte Spring Boot

1. Accedeix a Spring Initializr

Tria Maven Project, Java, versió recent de Spring Boot, i afegeix "Spring Web". Omple els camps obligatorys i descarrega el zip.

2. Importa el projecte al teu IDE

Segueix les instruccions per a IntelliJ, Eclipse o VS Code.

3. Examina la classe principal PrimerProjecteApplication.java

@SpringBootApplication
public class PrimerProjecteApplication {
    public static void main(String[] args) {
        SpringApplication.run(PrimerProjecteApplication.class, args);
    }
}

Exercici 2: Controlador REST Bàsic

1. Crea el paquet controller i la classe HolaController

@RestController
public class HolaController {
    @GetMapping("/hola")
    public String saludar() {
        return "Hola, benvingut a Spring Boot!";
    }
}

2. Prova des del navegador: http://localhost:8080/hola


Exercici 3: Paràmetres d'URL

Afegir a HolaController:

@GetMapping("/hola/{nom}")
public String saludarPersonalitzat(@PathVariable String nom) {
    return "Hola, " + nom + "!";
}

I la ruta amb query params:

@GetMapping("/salutacio")
public String salutacioCompleta(@RequestParam String nom, @RequestParam(required = false, defaultValue = "amig") String tractament) {
    return "Hola, estimat " + tractament + " " + nom + "!";
}


Exercici 4: Retornar Obtectes JSON

Crea el paquet model amb la classe Usuari:

public class Usuari {
    private Long id;
    private String nom;
    private String email;
    private int edat;
    // Getters i Setters
}

Controlador:

@RestController
@RequestMapping("/api/usuaris")
public class UsuariController {
    @GetMapping("/{id}")
    public Usuari obtenirUsuari(@PathVariable Long id) {
        return new Usuari(id, "Maria Garcia", "maria@exemple.com", 25);
    }

    @GetMapping
    public List<Usuari> obtenirTots() {
        return Arrays.asList(
            new Usuari(1L, "Maria", "maria@exemple.com", 25),
            new Usuari(2L, "Joan", "joan@exemple.com", 30)
        );
    }
}


Exercici 5: Servei de Lògica

Paquet service amb UsuariService que manté la llista d'usuaris. La injecció al controlador amb @Autowired.

@Service
public class UsuariService {
    private List<Usuari> usuaris = new ArrayList<>();
    // Mètodes obtenir, buscar, cercar...
}

Exercici 6: POST Crear Usuari

Al controlador:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Usuari crearUsuari(@RequestBody Usuari usuari) {
    return usuariService.crearUsuari(usuari);
}

Prova amb Postman/curl, Content-Type: application/json.


Exercici 7: CRUD complet

Endpoints PUT per actualitzar i DELETE per eliminar. Retorna codis adequats amb ResponseEntity.


Exercici 8: Validació de Dades

Afegeix les anotacions de validació a la classe Usuari:

@NotBlank(message = "El nom no pot estar buit")
@Email(message = "Email no vàlid")
@Min(value = 18, message = "L'edat mínima és 18")
Al controlador, afegeix @Valid.

Gestiona errors amb una classe GlobalExceptionHandler (@RestControllerAdvice).


Exercici 9: Base de dades H2

Afegeix JPA i H2 al pom.xml. Configura application.properties per enllaçar amb H2 i fer servir JPA. Modifica Usuari amb anotacions @Entity i @Id.

Un repositori:

@Repository
public interface UsuariRepository extends JpaRepository<Usuari, Long> {}

Servei que fa servir el repositori per CRUD.


Exercici 10: Excepcions Personalitzades

Crea classes com UsuariNoTrobatException. Gestiona amb GlobalExceptionHandler i retorna JSON amb errors.


Exercici 11: Paginació i Ordenació

Utilitza Pageable i Sort als repositoris:

public Page<Usuari> findAll(Pageable pageable);
public List<Usuari> findAll(Sort sort);

Endpoints que reben params pagina, mida, ordenarPer, direccio.


Exercici 12: Seguretat

Afegeix spring-boot-starter-security. Crea SecurityConfig amb usuaris en memòria i roles.

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ... }

Endpoints restringits per rol. Prova autenticació amb curl/Postman.


Recursos addicionals


Autor: Exercicis creats per a estudiants de desenvolupament web Data: Octubre 2025 Versió: 1.0