2013-07-26 208 views
22

我想实现以下目标。自定义响应头泽西/ Java

从请求读取自定义标题,并将其值:现在

name: username 

,上回应,我想回到相同的标题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; 
} 

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

回答

30

只需要注入一个@Context HttpServletResponse response作为方法参数。改变对

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

它需要我添加额外的库吗?它说未识别的类“HttpServletResponse”。 – Namenoobie

+0

@Namenoobie您需要服务器运行时库。这基本上是servlet api。如果您使用的是Eclipse,请转至您的项目Java构建路径并添加库。 –

+0

当我按照说明操作时,我得到了本地机器上已存在的Tomcat服务器。 – Namenoobie

2

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

+2

对不起,我不关注。你能详细说明一下吗? – Namenoobie

44

我认为使用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; 
    } 
+4

这应该是选定的答案。 – reinaldoluckman

+5

,使它更加简单,用'.ok'代替'.status(200).entity'。 –

+0

这可能会导致使用[swagger codegen](https://github.com/swagger-api/swagger-codegen)生成自动API文档的问题。 – koppor