JAX-RS/Jersey 中的资源 Class 和提供者 class 有什么区别?

What is the difference between Resource Class and Provider class in JAX-RS/Jersey?

在 Jersey/JAX-RS 中,我听到术语 "Resource classes" 和 "Providers"。我不清楚这两者之间的区别是什么。有人可以提供一些适当的解释吗?

Resource classes 是用 @Path 注释的 类,提供者是我们可以 extend/implement 允许我们点击 [=60] 的任何其他 类 =] JAX-RS 框架,即

  • ContainerRequestFilter
  • ContainerResponseFilter
  • MessageBodyReader
  • MessageBodyWriter
  • WriterInterceptor
  • ReaderInterceptor
  • ContextResolver
  • ExceptionMapper
  • ClientRequestFilter
  • ClientResponseFilter

除了客户端过滤器,所有这些提供程序 类 都可以用 @Provider 注释并在启用扫描时自动在服务器端注册。

您可能经常听到类似 "What JSON provider are you using?" 的问题,这是指 MessageBodyReaderMessageBodyWriter,这是一种提供商,或者更准确地说是 "Entity Provider",因为the docs 中提到。这实际上是唯一具有自己的前缀类型的提供者类型。所有其他的只是概括为 "Provider".

提供者类型可能更多,但我现在能想到的就这些。