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