I provider sono semplicemente un modo per estendere e personalizzare il runtime JAX-RS. Puoi pensarli come plugin che (potenzialmente) alterano il comportamento del runtime, al fine di raggiungere una serie di obiettivi (definiti dal programma).
I provider non sono la stessa cosa delle classi di risorse, esistono, concettualmente, a un livello intermedio tra le classi di risorse e l'implementazione JAX-RS. Se aiuta, puoi pensarli alla stessa luce dei driver di dispositivo (esistenti tra lo spazio utente e il kernel). Questa è un'ampia generalizzazione.
Esistono tre classi di provider definiti dalla specifica JAX-RS corrente. La cosa comune tra loro è che tutti i provider devono essere identificati dall'annotazione @Provider e seguire determinate regole per la dichiarazione del costruttore. Oltre a ciò, diversi tipi di provider possono avere annotazioni aggiuntive e implementeranno interfacce diverse.
Fornitori di entità
Questi fornitori controllano la mappatura delle rappresentazioni dei dati (come XML, JSON, CSV) ai loro equivalenti di oggetti Java.
Provider di contesto
Questi provider controllano il contesto a cui le risorse possono accedere tramite le annotazioni @Context.
Fornitori di eccezioni
Questi provider controllano la mappatura delle eccezioni Java a un'istanza di risposta JAX-RS.
Il tuo runtime verrà fornito con una serie di provider predefiniti che saranno responsabili dell'implementazione di un livello base di funzionalità (ad esempio per la mappatura da e verso XML, la traduzione delle eccezioni più comuni, ecc. Ecc.). È inoltre possibile creare i propri fornitori in base alle esigenze.
La specifica JAX-RS è un buon riferimento per leggere su questi diversi tipi di provider e cosa fanno (vedere il Capitolo 4).