Chapitre 2: Troubleshooting et Résolution de Problèmes
Objectifs
- Identifier et résoudre les problèmes courants
- Utiliser les guides de troubleshooting du projet
- Maîtriser les techniques de débogage Spring Boot
Ressource Principale
Tous les guides de troubleshooting sont disponibles dans le repository:
Liste des Guides Disponibles
Le dossier troubleshooting contient de nombreux guides numérotés pour vous aider:
| Guide | Sujet | Description |
|---|---|---|
| 01-xx | Configuration initiale | Setup du projet |
| 10-xx | Base de données | PostgreSQL, H2, connexions |
| 15-xx | Spring Security | Configuration sécurité |
| 20-xx | JWT | Tokens, authentification |
| 25-xx | API REST | Endpoints, CORS |
| 27 | Frontend Codespaces | Intégration frontend |
| 28-xx | Tests | Tests unitaires et intégration |
Problèmes Fréquents et Solutions
1. Erreur de Démarrage de l'Application
Symptôme
***************************
APPLICATION FAILED TO START
***************************
Causes Possibles et Solutions
Base de données non configurée:
# application.yml - Configuration H2 pour développement
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
h2:
console:
enabled: true
Port déjà utilisé:
# Vérifier le port
lsof -i :8080
# Utiliser un autre port
./mvnw spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
2. Erreur 401 Unauthorized
Symptôme
{
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required"
}
Solution
L'endpoint nécessite un token JWT. Suivez ces étapes:
# 1. S'enregistrer (si endpoint disponible)
curl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "admin@test.com", "password": "password123"}'
# 2. Se connecter pour obtenir le token
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "admin@test.com", "password": "password123"}'
# 3. Utiliser le token reçu
curl http://localhost:8080/api/admin/leads \
-H "Authorization: Bearer VOTRE_TOKEN_JWT"
3. Erreur CORS
Symptôme (dans la console du navigateur)
Access to fetch at 'http://localhost:8080/api/contact' from origin
'http://localhost:3000' has been blocked by CORS policy
Solution
Vérifier la configuration CORS dans SecurityConfig.java:
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
configuration.setAllowedHeaders(Arrays.asList("*"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
4. Erreur de Validation
Symptôme
{
"status": 400,
"errors": {
"email": "must be a valid email",
"fullName": "must not be blank"
}
}
Solution
Vérifier les données envoyées. Tous les champs obligatoires doivent être présents:
{
"fullName": "Nom Complet", // Obligatoire
"email": "email@valide.com", // Obligatoire, format email
"company": "Optionnel", // Optionnel
"phone": "Optionnel", // Optionnel
"requestType": "INFO", // Obligatoire: INFO, QUOTE, SUPPORT, PARTNERSHIP, OTHER
"message": "Au moins 10 caractères minimum pour ce message" // Obligatoire
}
5. Problème de Base de Données PostgreSQL
Symptôme
Connection to localhost:5432 refused
Solutions
Option A - Utiliser H2 en développement:
# application.yml
spring:
profiles:
active: dev
---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:h2:mem:testdb
Option B - Lancer PostgreSQL avec Docker:
docker run -d \
--name postgres-econtact \
-e POSTGRES_DB=econtactdb \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-p 5432:5432 \
postgres:14-alpine
6. Token JWT Expiré
Symptôme
{
"status": 401,
"error": "Token expired"
}
Solution
Se reconnecter pour obtenir un nouveau token:
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "votre@email.com", "password": "votremotdepasse"}'
7. Erreur 500 Internal Server Error
Diagnostic
- Consulter les logs:
# Dans le terminal où l'application tourne
# Les stack traces apparaissent automatiquement
- Activer les logs de debug:
# application.yml
logging:
level:
com.example.econtact: DEBUG
org.springframework.security: DEBUG
- Vérifier la console H2:
- URL:
http://localhost:8080/h2-console - JDBC URL:
jdbc:h2:mem:testdb
- URL:
🛠️ Outils de Débogage
Postman / Insomnia
Importez la collection Postman depuis le repository pour tester tous les endpoints facilement.
Console H2
Accessible à http://localhost:8080/h2-console pour inspecter la base de données.
Logs Spring Boot
# Activer les logs détaillés
logging:
level:
root: INFO
com.example.econtact: DEBUG
org.springframework.web: DEBUG
org.hibernate.SQL: DEBUG
Actuator (si activé)
# Vérifier la santé de l'application
curl http://localhost:8080/actuator/health
# Voir les beans chargés
curl http://localhost:8080/actuator/beans
Guide Spécifique: Frontend avec Codespaces
Pour l'intégration du frontend dans l'environnement Codespaces, consultez le guide détaillé:
Checklist de Débogage
Avant de demander de l'aide, vérifiez:
- Les logs d'erreur dans le terminal
- La configuration dans
application.yml - La disponibilité de la base de données
- Le format des données envoyées (JSON valide)
- La présence du token JWT pour les endpoints protégés
- La configuration CORS pour les appels frontend
Prochaine Étape
Chapitre 3: Intégration Frontend →