自定义注释以在JAX-RS服务中设置HTTP响应头

时间:2010-10-10 21:15:27

标签: java annotations jax-rs

我有一个JAX-RS Web服务,我想通过新的CORS HTTP标头禁用同源策略。 (我完全了解安全隐患。)

我想要一个自定义注释,让我设置HTTP响应标头。例如,

@ResponseHeaders({"Access-Control-Allow-Origin: *",
                  "Access-Control-Allow-Methods: GET"})
// Or, alternatively:
@AllowOrigins({"*"})
public String resourceMethod() { ... }

这种方法最大限度地减少了样板代码,但我不确定是否存在微妙的技术限制; JAX-RS提供了许多注释来处理HTTP请求而不是响应,@Produces似乎是唯一的例外。

如果可能的话,我也更喜欢远离过多的web.xml配置。在没有明确需要使用ResponseBuilder的情况下(如果注释使用了一个就没关系),是否有一种设置自定义HTTP响应头的简洁方法?

为了澄清,我正在寻找与设置HTTP响应头的各种方法集成的注释,以便最小化样板代码。

1 个答案:

答案 0 :(得分:0)

也许唯一的规范驱动方法是使用自定义MessageBodyWriter。在writeTo()方法中,您将在MultivaluedMap中传递,您可以在其上设置响应头。您还会在调用的资源方法上传递注释(因此您可以获得所需的任何自定义注释)。因此,阅读注释,通过MultivaluedMap设置标题,然后使用传入的OutputStream编写消息体。

Apache Wink以及可能的其他JAX-RS框架中,您可以创建自定义服务器端处理程序,这些处理程序也可以读取资源方法上的注释并执行您想要的任何操作(例如,默认设置响应标头)。