JAX-RS 中的提供程序是什么意思?

2022-08-31 08:23:48

任何人都可以向我解释一下 JAX-RS 提供程序是什么以及“@Provider”注释的作用是什么?我一直在阅读文档,但我无法获得它。
如果有为传入请求提供服务的资源类,提供程序会执行什么操作?当我创建持久性资源类(不是按请求的)时,它们与单例资源类有何不同?或者这些类也是提供者吗?


答案 1

提供程序只是一种扩展和定制 JAX-RS 运行时的方法。您可以将它们视为(可能)改变运行时行为的插件,以实现一组(程序定义的)目标。

提供程序与资源类不同,它们在概念上存在于资源类和 JAX-RS 实现之间的某个级别。如果它有帮助,你可以把它们想象成设备驱动程序(存在于用户和内核空间之间)一样。这是一个广义的概括。

当前 JAX-RS 规范定义了三类提供程序。它们之间的共同点是,所有提供程序都必须由@Provider注释标识,并遵循构造函数声明的某些规则。除此之外,不同的提供程序类型可能具有其他注释,并将实现不同的接口。


实体提供商

这些提供程序控制数据表示(如 XML、JSON、CSV)与其 Java 对象等效项的映射。

上下文提供程序

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

异常提供程序

这些提供程序控制 Java 异常到 JAX-RS 响应实例的映射。


您的运行时将附带许多预定义的提供程序,这些提供程序将负责实现基本级别的功能(例如,用于与XML之间的映射,转换最常见的异常等)。您还可以根据需要创建自己的提供程序。

JAX-RS 规范是了解这些不同提供程序类型及其作用的良好参考(请参阅第 4 章)。


答案 2

@Provider注释用于 JAX-RS 运行时感兴趣的任何内容,例如 MessageBodyReaderMessageBodyWriter。对于 HTTP 请求,MessageBodyReader 用于将 HTTP 请求实体正文映射到方法参数。在响应端,使用 MessageBodyWriter 将返回值映射到 HTTP 响应实体正文。如果应用程序需要提供其他元数据(如 HTTP 标头或其他状态代码),则方法可以返回包装实体的 Response,并且可以使用 Response 生成该响应。ResponseBuilder.

@Provider注释使您能够在原始 XML 级别检查传入和传出消息,通过这种方式,提供程序是客户端上 Dispatch 的对应项。


推荐