Skip to Content
05 Best PracticesPièges Courants

Pièges Courants

Guide des erreurs classiques et leurs solutions pour éviter les problèmes avec Micronaut et l’architecture hexagonale.

Apprenez des erreurs courantes pour éviter de perdre des heures de débogage !


1. Lombok ne fonctionne pas dans les Controllers

Symptôme

@Controller @RequiredArgsConstructor // ← Ne marche pas ! public class MyController { private final MyService service; }

Erreur : No bean of type MyService available for injection

Conséquences :

  • ❌ Le controller ne démarre pas
  • ❌ Tests échouent
  • ❌ Application ne compile pas correctement

2. Jackson ne peut pas désérialiser mon DTO avec @Value

Symptôme

@Value public class TrendResponseDto { String keyword; Integer score; }

Erreur dans les tests :

Cannot construct instance of `TrendResponseDto` (no Creators, like default constructor, exist)

Problème :

  • ❌ Les tests qui désérialisent le JSON échouent
  • ❌ Impossible de mapper les réponses HTTP

3. Erreur “reference to assertThat is ambiguous”

Symptôme

Dans les tests :

assertThat(response.getStatus()).isEqualTo(HttpStatus.OK);

Erreur : reference to assertThat is ambiguous

Résultat :

  • ❌ Les tests ne compilent pas
  • ❌ IDE affiche des erreurs

4. Mon bean n’est pas injecté

Symptôme

No bean of type [MyService] exists

Conséquences :

  • ❌ Application ne démarre pas
  • ❌ Tests échouent
  • ❌ NullPointerException au runtime

5. GlobalExceptionHandler ne marche pas (PIÈGE PSYCHO)

Symptôme

Tu as créé un GlobalExceptionHandler mais les exceptions ne sont pas interceptées.

@Singleton @Produces public class GlobalExceptionHandler implements ExceptionHandler<Exception, HttpResponse<ErrorResponse>> { // Pas appelé ! }

Résultat :

  • ❌ Erreurs 500 au lieu de 404/400
  • ❌ Tests échouent
  • ❌ Messages d’erreur par défaut de Micronaut

Récapitulatif

Type d’erreurGéré parTon handler appelé ?
@QueryValue manquantMicronaut❌ Non
@Valid échoueMicronaut❌ Non
JSON invalideMicronaut❌ Non
ResourceNotFoundExceptionTON HANDLER✅ Oui
RuntimeException non géréTON HANDLER✅ Oui

6. Le Domain dépend de Jackson (VIOLATION ARCHITECTURE)

Symptôme

// ❌ domain/model/Country.java @Value public class Country { @JsonProperty("name") // ❌ Jackson dans le domain ! Name name; }

Conséquences :

  • ❌ Tests d’architecture échouent
  • ❌ Domain couplé à Jackson
  • ❌ Impossible de changer de librairie

7. Mon test échoue de façon aléatoire

Symptôme

@Test void topicsShouldBeSortedByScore() { var topics = api.getTopics(); assertThat(topics.get(0).getScore()) .isGreaterThan(topics.get(1).getScore()); }

Résultat : Parfois ça passe, parfois ça échoue.

Problème :

  • ❌ Tests instables
  • ❌ CI/CD aléatoire
  • ❌ Difficile à déboguer

8. Mon endpoint retourne 404

Symptôme

@Controller("/api/trends") public class TrendController { @Get public TrendResponseDto getTrends() { } }

Appel à GET /api/trends → 404

Résultat :

  • ❌ Endpoint non trouvé
  • ❌ Tests échouent

9. mvn test ne trouve pas mes tests

Symptôme

[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

Problème :

  • ❌ Aucun test exécuté
  • ❌ Code non testé
  • ❌ Couverture 0%

Checklist de débogage

Quand quelque chose ne marche pas :

Recompiler

mvn clean compile

Vérifier l’ordre Lombok/Micronaut

Dans le pom.xml, Lombok doit être AVANT Micronaut.

Vérifier les annotations

  • @Singleton, @Controller, @Inject
  • Pas de @Requires inutiles (surtout sur les ExceptionHandler)

Consulter les logs

Micronaut affiche ce qu’il crée au démarrage :

INFO io.micronaut.runtime.Micronaut - Startup completed in 1234ms

Vérifier les imports

Pas de mélange AssertJ/Hamcrest/JUnit.

Cast pour HttpStatus

assertThat((CharSequence) response.getStatus()).isEqualTo(HttpStatus.OK);

Flag -parameters

Activé dans le compiler Maven pour Jackson.

Relancer l’IDE

IntelliJ peut avoir un cache obsolète.


Résumé

Évitez ces pièges courants pour gagner du temps et éviter la frustration !

PiègeSymptômeSolution
Lombok avant MicronautBean pas injectéOrdre dans pom.xml
Jackson + @ValueCannot construct instance-parameters + module Jackson
assertThat ambiguousErreur compilationUtiliser uniquement AssertJ
Bean pas injectéNo bean exists@Singleton + bon package
GlobalExceptionHandlerPas appeléRetirer @Requires + tester TES exceptions
Jackson dans DomainTests archi échouentDTOs dans infrastructure
Tests aléatoiresInstabilitéTrier ou seed fixe
Endpoint 404Not foundVérifier chemin + bean + compilation
Tests non trouvés0 tests runNom *Test.java + @Test + public

Prochaines étapes

Maintenant que vous connaissez les pièges, explorez les bonnes pratiques pour un code propre.


Ressources

Last updated on