Site icon Blog Zenika

Ma première application Spring Boot 2 avec Kotlin

Kotlin est un langage de programmation développé par JetBrains (IntelliJ IDEA) et proposé comme un remplaçant de Java. En tant que développeur Java / Spring depuis plusieurs années j’étais curieux de voir ce que le langage avait à offrir. Suite à la release officielle de Spring Boot 2 le 1er mars dernier j’ai décidé de sauter le pas et de créer ma première application web Kotlin.
Je vais créer l’application de gestion de livres kbooks avec les librairies suivantes :

Le projet complet est disponible sur GitHub : https://github.com/Zenika/kbooks/tree/1.0.0

Prérequis

Si vous n’êtes pas familiers avec la syntaxe de Kotlin, je vous invite à suivre ce lien qui présente les bases du langage : https://medium.com/@magnus.chatt/why-you-should-totally-switch-to-kotlin-c7bbde9e10d5

Création du projet

La création de notre projet se fait comme en Java via http://start.spring.io/, il suffit de sélectionner Kotlin dans la liste des langages. Ensuite j’ajoute les dépendances dont j’ai besoin.

Modèle de données

Pour créer les entités, j’utilise les data class de Kotlin. Tous les paramètres doivent avoir une valeur par défaut pour que le compilateur Kotlin génère un constructeur vide, obligatoire avec Hibernate. À noter l’utilisation de la méthode mutableListOf() pour créer une liste mutable vide.
Book.kt, Author.kt :
Ensuite je crée les interfaces d’accès aux entités. Elles héritent de l’interface  PagingAndSortingRepository et leur implémentation est générée par Spring Data. Comme ces interfaces n’ont pas de contenu, je peux omettre les accolades.
IBookRepository.kt, IAuthorRepository.kt :

Service de gestion des livres

Maintenant que j’ai créé le modèle de données et les interfaces pour y accéder, je crée le service d’accès aux livres.
BookService.kt :
Ici j’utilise plusieurs spécificités de Kotlin :

Je crée également le dto BookDto, comme pour l’entité j’utilise une data class.
Enfin l’entité est convertie en dto par le singleton BookDtoConverter :
C’est le mot clé object qui définit BookDtoConverter comme un singleton. Son instance sera créée de manière “thread safe” par le runtime Kotlin, au moment du premier appel à la méthode convert.

La couche REST

Maintenant pour exposer le service via une api REST j’utilise Jax-RS avec Jersey.
BookResource.kt :
Comme la méthode getBook est très courte, je peux utiliser une notation simplifiée sans accolades.
Enfin, je crée une configuration Spring pour exposer la ressource :
JerseyConfig.kt :
Cette classe hérite de ResourceConfig et son constructeur par défaut appelle le constructeur vide de ResourceConfig. Nous enregistrons la ressource dans un bloc init car il sera appelé par tous les constructeurs de la classe (si j’en ajoute un).

Tester avec Mockito-Kotlin

Je réalise les tests avec JUnit, Mockito, kotlin-test et mockito-kotlin. Les deux dernières librairies sont des wrappers des deux premières qui facilitent l’écriture de tests unitaires en Kotlin.
BookServiceTest.kt :
L’écriture des tests unitaires est similaire à ceux que l’on écrit en Java mais encore une fois l’écriture est plus concise.

Conclusion

Le développement d’une application Spring Boot avec Kotlin est très proche de ce qui est fait en Java, on ne perd pas ses repères. Néanmoins ces quelques exemples mettent en avant les avantages de Kotlin qui est plus concis et permet d’être plus productif qu’avec Java.
Pour aller plus loin, je vous invite à découvrir les autres plateformes pour lesquelles Kotlin peut être utilisé. Vous pouvez par exemple faire du React mais également des applications natives pour Windows ou Android. Et si vous voulez tester Kotlin sans l’installer je vous invite à utiliser l’image Docker alpine-kotlin.
 

Auteur/Autrice

Quitter la version mobile