Подтвердить что ты не робот

Пользовательский заголовок ответа Джерси/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;
}

Как я могу это достичь? Любые указатели были бы замечательными!

4b9b3361

Ответ 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-заголовки.