Jersey REST: импорт заголовков из карты в экземпляр WebResource - PullRequest
3 голосов
/ 21 июля 2011

Я пытаюсь взять произвольный набор заголовков HTTP и сбросить его в экземпляр WebResource.Интерфейс WebResource позволяет делать это с параметрами запроса, поскольку он предлагает и

        webResource.queryParam(key, value)

и

        webResource.queryParams(MultivaluedMap<String, String> queryMap)

API, однако, не позволяет делать то же самое с заголовками.Существует только одна функция,

            webResource.header(key, value)

, которая позволяет вводить пару ключ-значение для HTTP-заголовка, но нет функции

 webResource.headers(MultivaluedMap<String, String> headersMap)

Чтобы решить эту проблему, я попыталсяполучить конструктор из WebResource и выполнить итерацию по нему, добавляя заголовки один за другим

        WebResource.Builder builder = webResource.getRequestBuilder();
    for(Map.Entry<String, String> headersMapEntry : headersMap.entrySet()){
        builder = builder.header(
                       headersMapEntry.getKey(), headersMapEntry.getValue());
    }

, но это, похоже, не решает мою проблему.

Кто-нибудь знает, как я могусделать обходной путь с Джерси, чтобы я мог сбросить произвольную карту в заголовки моего веб-ресурса?

Спасибо, Дэвид

Ответы [ 3 ]

5 голосов
/ 23 августа 2011

Оказалось, что единственный выход - это сначала извлечь requestBuilder из webResource с помощью getRequestBuilder (), а затем с помощью requestBuilder построить и выполнить оставшуюся часть запроса.

0 голосов
/ 12 августа 2015

Этот пост более подробно объясняет эту проблему и решение с помощью примеров: http://juristr.com/blog/2015/05/jersey-webresource-ignores-headers/

0 голосов
/ 11 декабря 2014

Поскольку вы не можете запустить фактический запрос, если вы получили RequestBuilder или PartialRequestBuilder, вы должны получить:

WebResource.Builder builder = webResource.getRequestBuilder();

WebResource.Builder имеет get, post и т. Д.:

response = builder.post(ClientResponse.class, body);
...