自定义响应头泽西/ Java

Nam*_*bie 27 java rest json jax-rs jersey

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

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

name: username
Run Code Online (Sandbox Code Playgroud)

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

我正在使用JAX-RS webservice的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;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?任何指针都会很棒!

Ale*_*x P 50

我认为使用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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 更简单地用`.ok`替换`.status(200).entity`. (7认同)
  • 这应该是选定的答案. (4认同)

Sot*_*lis 36

只需注入一个@Context HttpServletResponse response方法参数.更改标题

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