谁能向我解释什么是JAX-RS提供程序,什么是'@Provider'注释?我一直在阅读文档,但无法理解。
如果存在为传入请求提供服务的资源类,提供者将做什么?当我创建一个持久性资源类(不是每个请求一个)时,它们与单例资源类有何不同?还是那些课程也是提供者?
谁能向我解释什么是JAX-RS提供程序,什么是'@Provider'注释?我一直在阅读文档,但无法理解。
如果存在为传入请求提供服务的资源类,提供者将做什么?当我创建一个持久性资源类(不是每个请求一个)时,它们与单例资源类有何不同?还是那些课程也是提供者?
Answers:
提供者是扩展和定制JAX-RS运行时的简单方法。您可以将它们视为可以(可能)更改运行时行为的插件,以实现一组(程序定义的)目标。
供应商是不一样的资源类,它们的存在,在概念上,在资源类和JAX-RS实现在两者之间的水平。如果有帮助,您可以从与设备驱动程序(用户空间和内核空间之间存在)相同的角度来考虑它们。这是一个广义的概括。
当前的JAX-RS规范定义了三类提供程序。它们之间的共同点是,所有提供程序都必须由@Provider批注标识,并遵循某些构造函数声明规则。除此之外,不同的提供程序类型可能具有附加的注释,并将实现不同的接口。
实体提供者
这些提供程序控制数据表示形式(例如XML,JSON,CSV)到其Java对象等效项的映射。
上下文提供者
这些提供程序控制资源可以通过@Context批注访问的上下文。
例外提供者
这些提供程序控制Java异常到JAX-RS Response实例的映射。
您的运行时将附带许多预定义的提供程序,这些提供程序将负责实现基本功能级别(例如,用于与XML进行映射,转换最常见的异常等)。您还可以根据需要创建自己的提供程序。
在JAX-RS规范是对这些不同类型的供应商和他们做了什么(见第4章)读了一个很好的参考。
该@Provider注释用于任何感兴趣的JAX-RS运行时,如化MessageBodyReader和MessageBodyWriter。对于HTTP请求,MessageBodyReader用于将HTTP请求实体主体映射到方法参数。在响应方面,通过使用MessageBodyWriter将返回值映射到HTTP响应实体主体。如果应用程序需要提供其他元数据(例如HTTP标头或其他状态代码),则方法可以返回包装实体并可以使用Response构建的Response。ResponseBuilder。
@Provider批注使您能够在原始XML级别检查传入和传出的消息,并且Provider以这种方式与客户端上的Dispatch相对。
为了完成某些活动,例如过滤请求/响应,异常处理,JAX-RS有其自己的默认实现逻辑。但是,它也允许用户提供自己的实现。
为了提供我们自己的实现,我们需要通过使用@Provider注释指定它们来实现适当的类。
JAX-RS将通过搜索@Provider批注进行一轮扫描,以查找任何此类用户定义的实现的存在。
例如:
...
@Provider
public class AppExceptionMapper implements ExceptionMapper<Throwable> {
...
...
@Provider
@PreMatching
public class RESTRequestResponseFilter implements ContainerRequestFilter, ContainerResponseFilter {
...