Les fournisseurs sont simplement un moyen d'étendre et de personnaliser le runtime JAX-RS. Vous pouvez les considérer comme des plugins qui modifient (potentiellement) le comportement de l'exécution, afin d'accomplir un ensemble d'objectifs (définis par le programme).
Les fournisseurs ne sont pas les mêmes que les classes de ressources, ils existent, conceptuellement, à un niveau intermédiaire entre les classes de ressources et l'implémentation JAX-RS. Si cela aide, vous pouvez les considérer de la même manière que les pilotes de périphériques (existant entre l'espace utilisateur et l'espace noyau). Il s'agit d'une large généralisation.
Il existe trois classes de fournisseurs définies par la spécification JAX-RS actuelle. Le point commun entre eux est que tous les fournisseurs doivent être identifiés par l'annotation @Provider et suivre certaines règles pour la déclaration du constructeur. En dehors de cela, différents types de fournisseurs peuvent avoir des annotations supplémentaires et implémenteront différentes interfaces.
Fournisseurs d'entités
Ces fournisseurs contrôlent le mappage des représentations de données (comme XML, JSON, CSV) à leurs équivalents d'objet Java.
Fournisseurs de contexte
Ces fournisseurs contrôlent le contexte auquel les ressources peuvent accéder via les annotations @Context.
Fournisseurs d'exception
Ces fournisseurs contrôlent le mappage des exceptions Java vers une instance de réponse JAX-RS.
Votre environnement d'exécution viendra avec un certain nombre de fournisseurs prédéfinis qui seront responsables de l'implémentation d'un niveau de base de fonctionnalité (par exemple pour le mappage vers et depuis XML, la traduction des exceptions les plus courantes, etc.). Vous pouvez également créer vos propres fournisseurs selon vos besoins.
La spécification JAX-RS est une bonne référence pour lire sur ces différents types de fournisseurs et ce qu'ils font (voir chapitre 4).