Провайдеры - это просто способ расширения и настройки среды выполнения JAX-RS. Вы можете думать о них как о надстройках, которые (потенциально) изменяют поведение среды выполнения для достижения набора (определенных программой) целей.
Провайдеры - это не то же самое, что классы ресурсов, они концептуально существуют на уровне между классами ресурсов и реализацией JAX-RS. Если это помогает, вы можете рассматривать их в том же свете, что и драйверы устройств (существующие между пространством пользователя и ядра). Это широкое обобщение.
Текущая спецификация JAX-RS определяет три класса поставщиков. Общность между ними заключается в том, что все поставщики должны быть идентифицированы аннотацией @Provider и следовать определенным правилам для объявления конструктора. Кроме того, разные типы поставщиков могут иметь дополнительные аннотации и реализовывать разные интерфейсы.
Провайдеры сущностей
Эти поставщики управляют отображением представлений данных (таких как XML, JSON, CSV) на их эквиваленты объекта Java.
Провайдеры контекста
Эти поставщики управляют контекстом, к которому ресурсы могут получить доступ через аннотации @Context.
Провайдеры исключений
Эти поставщики управляют отображением исключений Java в экземпляр ответа JAX-RS.
Ваша среда выполнения будет поставляться с рядом предопределенных поставщиков, которые будут отвечать за реализацию базового уровня функциональности (например, за отображение в XML и обратно, перевод наиболее распространенных исключений и т. Д.). При необходимости вы также можете создавать своих собственных провайдеров.
Спецификация JAX-RS - хороший справочник по этим различным типам поставщиков и их функциям (см. Главу 4).