在OSGi容器中为Jersey-Grizzly服务器内的Rest Services配置响应对象(使用Jersey 1x进



最近几天,我一直在为一个问题而苦苦挣扎。我创建了一个由 Grizzly 服务器托管在OSGi容器内的休息服务。在这一点上,一切都很完美。

现在,我想在每个响应中添加一个标题。没有那么复杂或不合逻辑吧?然而,我找不到一种方法来做到这一点。

我尝试:

1)按照这个问题的建议,在其余函数中获取响应对象(当你不在OSGi下时,这是一本教科书)。

2) 使用上面的代码添加一个处理程序(在这种情况下,永远不会调用服务方法)

    server.getServerConfiguration().addHttpHandler(
            new HttpHandler() {
                @Override
                public void service(Request arg0, Response arg1)
                        throws Exception {
                    arg1.setHeader("Access-Control-Allow-Origin", "*");
                }
            });

我使用的是 jersey-server/client/core 1.18.1 和 grizzly2-server 1.18.1,因此我更喜欢可以应用于此版本的解决方案,但如果无法在 1.18.x 中完成,我愿意更新 jar 版本。

您可以尝试使用泽西过滤器。
简而言之,您应该创建实现 ContainerResponseFilter 的类:

public class MyFilter implements ContainerResponseFilter {
    @Override
    public void filter(
        ContainerRequest request,
        ContainerResponse response
    ) throws IOException {
        request.getHttpHeaders().add(<header name>, <header value>);
    }
}

然后,您应该在泽西岛服务器配置中注册此过滤器。
请注意,每个响应都会调用此过滤器。若要仅将其绑定到特定资源,可以使用注释绑定,此处对此进行了描述。
您可以在此处找到的所有其他信息。

最新更新