自定义响应头 Jersey/Java

Posted

技术标签:

【中文标题】自定义响应头 Jersey/Java【英文标题】:Custom response header Jersey/Java 【发布时间】:2013-07-26 19:56:51 【问题描述】:

我正在努力实现以下目标。

从 Request 中读取自定义标头及其值:

name: username

现在,在响应时,我想在 HTTP 响应中返回相同的标头 name:value 对。

我正在使用 JAX-RS 网络服务的 Jersey 2.0 实现。

当我发送请求 URL Http://localhost/test/ 时,请求标头也被传递(暂时,虽然 Firefox 插件 - 硬编码它们)。

收到对该 URL 的请求后,将调用以下方法:

@GET
@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header) 
    MultivaluedMap<String, String> headerParams = header.getRequestHeaders();
    String userKey = "name";
    headerParams.get(userKey);

    // ...

    return user_object;

我怎样才能做到这一点?任何指针都会很棒!

【问题讨论】:

【参考方案1】:

返回 Response(来自 JAX-RS 的类),以 UserClass 作为实体。在Response 上,您可以设置 HTTP 标头。

【讨论】:

对不起,我不关注。你能详细说明一下吗?【参考方案2】:

只需注入 @Context HttpServletResponse response 作为方法参数。更改标题

@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) 
    response.setHeader("yourheadername", "yourheadervalue");
    ...

【讨论】:

是否需要我添加其他库?它说不明类“HttpServletResponse”。 @Namenoobie 您需要服务器运行时库。这基本上是 servlet api。如果您在 Eclipse 上,请转到您的项目 java buildpath 并添加库。 当我按照说明操作时,我得到了本地机器上已经存在的 Tomcat 服务器。 使用它设置标题对我有用,但使用它设置状态代码不起作用(使用 Dropwizard)。相反,我使用了 Alex P 的答案并使用了 Response。使其更具可读性(和可测试性)。 我正在使用 Maven 构建系统,我应该在 pom.xml 中包含什么依赖项才能获得 HttpServletResponse?【参考方案3】:

我认为使用javax.ws.rs.core.Response 更优雅,它是泽西岛的一部分。只是为了扩展之前的答案,这里是一个简单的例子:

    @GET
    @Produces( MediaType.APPLICATION_JSON )
    @Path("/values")
    public Response getValues(String body) 

        //Prepare your entity

        Response response = Response.status(200).
                entity(yourEntity).
                header("yourHeaderName", "yourHeaderValue").build();

        return response;
    

【讨论】:

这应该是选择的答案。 更简单地将.status(200).entity替换为.ok 这可能会导致使用 swagger codegen 自动生成 API 文档时出现问题。 对于文档生成,您可以使用annotations 指示响应类型。见@ApiOperation 这绝对应该是选择的答案

以上是关于自定义响应头 Jersey/Java的主要内容,如果未能解决你的问题,请参考以下文章

在 ApiController 中添加自定义响应头

NetCore3.1 自定义响应头

SpringCloudGateway 学习笔记 - 自定义过滤器 之 获取响应头

自定义响应头URL请求AS3

如何在curl中设置自定义的HTTP头

从axios响应头中获取值[重复]