以编程方式调用 Jersey ResourceMethod



我需要拦截泽西岛资源调用并在每次资源方法调用之前/之后运行代码。 我有一个模型处理器,能够拦截调用:

for(Resource resource: resourceModel.getResources()) {
for (ResourceMethod resourceMethod : resource.getResourceMethods()) {
Resource.Builder resourceBuilder = Resource.builder(...);
resourceBuilder
.addMethod(resourceMethod)
.handledBy(new Inflector<ContainerRequestContext, Response>() {
@Override
public Response apply(ContainerRequestContext containerRequestContext) {
...
}
});
}
}

但是,我不知道如何在此处调用原始资源方法。

您可以考虑使用泽西过滤器或拦截器。 从文档中: https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/filters-and-interceptors.html#d0e9368

过滤器和拦截器可以在客户端和 服务器端。筛选器可以修改入站和出站请求,以及 响应,包括修改标头、实体和其他 请求/响应参数。拦截器主要用于 修改实体输入和输出流。您可以使用 拦截器,例如用于压缩和解压缩输出和输入实体 流。

拦截器共享服务器端和客户端的通用 API。 而过滤器主要用于操作请求和 响应参数,如 HTTP 标头、URI 和/或 HTTP 方法, 拦截器旨在通过操纵实体 实体输入/输出流。例如,如果您需要对实体进行编码 客户端请求的正文,然后您可以实现拦截器来执行 为您工作。

所以我认为你想使用拦截器,因为它们会包装资源调用,并且在资源调用之前和资源调用之后,你都可以使用相同的方法进行访问。

你也可以使用过滤器,但你必须将代码分解为RequestFilter和ResponseFilter。

相关内容

最新更新