自定义响应头 Jersey/Java

新手上路,请多包涵

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

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

 name: username

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

我正在使用 JAX-RS web 服务的 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;
}

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

原文由 Namenoobie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 509
2 个回答

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

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

原文由 Sotirios Delimanolis 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

     @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;
    }

原文由 Alex P 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题