Aller au contenu principal

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​

Documentation Officielle

Tous les guides de troubleshooting sont disponibles dans le repository:

** Dossier Troubleshooting**


Liste des Guides Disponibles​

Le dossier troubleshooting contient de nombreux guides numérotés pour vous aider:

GuideSujetDescription
01-xxConfiguration initialeSetup du projet
10-xxBase de donnéesPostgreSQL, H2, connexions
15-xxSpring SecurityConfiguration sécurité
20-xxJWTTokens, authentification
25-xxAPI RESTEndpoints, CORS
27Frontend CodespacesIntégration frontend
28-xxTestsTests 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​

  1. Consulter les logs:
# Dans le terminal où l'application tourne
# Les stack traces apparaissent automatiquement
  1. Activer les logs de debug:
# application.yml
logging:
level:
com.example.econtact: DEBUG
org.springframework.security: DEBUG
  1. Vérifier la console H2:
    • URL: http://localhost:8080/h2-console
    • JDBC URL: jdbc:h2:mem:testdb

🛠️ 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​

Guide Essentiel

Pour l'intégration du frontend dans l'environnement Codespaces, consultez le guide détaillé:

** 27-guide-formulaire-frontend-codespaces.md**


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 →


Retour à l'index du module