Пользовательский заголовок ответа Джерси/Java
Я пытаюсь добиться следующего.
Прочитайте пользовательский заголовок и его значение из запроса:
name: username
Теперь, при ответе, я хотел бы вернуть ту же пару заголовков name:value
в ответе HTTP.
Я использую внедрение JSX-RS в Джерси 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;
}
Как я могу это достичь? Любые указатели были бы замечательными!
Ответы
Ответ 1
Просто введите @Context HttpServletResponse response
как аргумент метода. Измените заголовки на этом
@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) {
response.setHeader("yourheadername", "yourheadervalue");
...
}
Ответ 2
Я думаю, что использование 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;
}
Ответ 3
Возвращает a Response
(класс из JAX-RS) с UserClass
как объект. На Response
вы можете установить HTTP-заголовки.