JAX-RS中的Provider是什么意思?

任何人都可以向我解释什么JAX-RS提供程序和@Provider注释。 我一直在阅读文件,但我不能得到它。
如果有资源类来处理传入的请求,提供者会做什么? 当我创build一个持久资源类(不是每个请求的类)时,它们与单例资源类有什么不同? 还是那些类还提供者?

提供者是扩展和自定义JAX-RS运行时的简单方法。 你可以把它们想象成插件(可能)改变运行时的行为,以完成一套(程序定义的)目标。

提供者与资源类不同,它们在概念上存在于资源类和JAX-RS实现之间的层次上。 如果有帮助的话,你可以把它们看作是设备驱动程序(存在于用户和内核空间之间)。 这是一个广泛的概括。

目前的JAX-RS规范定义了三类提供者。 它们之间的共同点是,所有提供者必须由@Provider注解来标识,并遵循一定的构造函数声明规则。 除此之外,不同的提供者types可能会有额外的注释,并会实现不同的接口。


实体提供者

这些提供程序控制数据表示(如XML,JSON,CSV)到它们的Java对象等价物的映射。

上下文提供者

这些提供程序控制资源可以通过@Context注释访问的上下文。

exception提供者

这些提供程序控制Javaexception到JAX-RS Response实例的映射。


您的运行时将带有许多预定义的提供程序,这些提供程序将负责实现基本级别的function(例如,映射到XML映射,转换最常见的exception等)。 您也可以根据需要创build自己的提供者。

JAX-RS规范是阅读这些不同的提供者types以及他们做什么的好参考(见第4章)。

@Provider注释用于JAX-RS运行时感兴趣的任何内容,例如MessageBodyReaderMessageBodyWriter 。 对于HTTP请求,MessageBodyReader用于将HTTP请求实体主体映射到方法参数。 在响应方面,通过使用MessageBodyWriter将返回值映射到HTTP响应实体主体。 如果应用程序需要提供额外的元数据,例如HTTP标头或不同的状态码,则方法可以返回一个包装实体的响应,并且可以使用响应来构build。 ResponseBuilder

@Provider注释使您能够在原始的XML级别检查传入和传出的消息,并以这种方式提供者是客户端上的Dispatch的对应部分。