java - 用于在 JAX-RS 服务中设置 HTTP 响应 header 的自定义注释

标签 java annotations jax-rs

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

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

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

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

如果可能的话,我也更喜欢远离太多的 web.xml 配置。无需明确需要使用 ResponseBuilder (如果注释使用一个也可以),是否有一种干净的方法来设置自定义 HTTP 响应 header ?

为了澄清,我正在寻找与设置 HTTP 响应 header 的各种方法集成的注释,以最大限度地减少样板代码。

最佳答案

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

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

关于java - 用于在 JAX-RS 服务中设置 HTTP 响应 header 的自定义注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902234/

相关文章:

java - 在 hibernate 中注释派生数据库列

maven-compiler-plugin 指定 fork=true 时不做注解处理?

java - 如何使用颜色代码为 Swing 组件添加背景颜色?

java - 使用蓝牙获取两个 Android 设备之间的距离

java - 在 JAR 中的资源中

amazon-web-services - 如何通过k8s批注更新AWS NLB设置以将日志存储在S3存储桶中

java - Shiro 的 SecurityUtils 内部结构

java - 如何为 REST 服务生成 WADL

java - 通过示例进行 DropWizard 身份验证

java - 在 Sqlite 中忽略查询中的标点符号