以编程方式调用Jersey ResourceMethod

问题描述 投票:0回答:1

我需要在每次ResourceMethod调用之前/之后拦截Jersey资源调用并运行代码。我有一个ModelProcessor,并且能够拦截呼叫:

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) {
              ...
          }
        });
    }
}

但是,我在这里不知道如何调用原始ResourceMethod。有什么想法吗?

谢谢!

jersey
1个回答
0
投票

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

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

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

所以我想您要使用Interceptor,因为它们将包装资源调用,并且在资源调用之前和之后,您都可以使用相同的方法进行访问。

您可能还使用了过滤器,但是必须将代码破坏到RequestFilter和ResponseFilter。

© www.soinside.com 2019 - 2024. All rights reserved.