我正在努力实现以下目标。
从Request:
中读取自定义标头及其值name: username
现在,在回复时,我想在HTTP响应中返回相同的标头name:value
对。
我正在使用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;
}
我怎么能实现这个目标?任何指针都会很棒!
答案 0 :(得分:49)
我认为使用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;
}
答案 1 :(得分:36)
只需注入一个@Context HttpServletResponse response
作为方法参数。更改
@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) {
response.setHeader("yourheadername", "yourheadervalue");
...
}
答案 2 :(得分:2)
以Response
为实体返回UserClass
(来自JAX-RS的类)。在Response
上,您可以设置HTTP标头。