【问题标题】:Custom response header Jersey/Java自定义响应头 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;
}

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

【问题讨论】:

    标签: java json rest jersey jax-rs


    【解决方案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
    • 这绝对应该是选择的答案
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多