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")
@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