最近几天,我一直在努力解决一个问题。我在OSGi容器内创建了一个由Grizzly服务器托管的rest服务。此时一切都工作正常。

现在,我想在每个响应中添加标题。不是那么复杂或不合逻辑吗?但是,我找不到办法。

我试图:

1)按照this question的建议在其余函数中获取响应对象(当您不在OSGi之下时,这是一本漂亮的教科书)。

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

    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中无法完成,我愿意更新jar版本。 X。

最佳答案

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

public class MyFilter implements ContainerResponseFilter {

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


然后,您应该在Jersey服务器配置中注册此过滤器。
请注意,此过滤器将在每个响应上调用。要将其仅绑定到特定资源,可以使用here中所述的注释绑定。
您可以找到here的所有其他信息。

10-08 01:12
查看更多