Próbuję przyjąć dowolny zestaw nagłówków HTTP i zrzucić go do wystąpienia WebResource. Interfejs WebResource pozwala to zrobić za pomocą parametrów zapytania, ponieważ oferuje zarówno
webResource.queryParam(key, value)
I
webResource.queryParams(MultivaluedMap<String, String> queryMap)
API nie pozwala jednak na zrobienie tego samego z nagłówkami. Jest tylko jedna funkcja,
webResource.header(key, value)
Co pozwala na wprowadzenie pary klucz-wartość dla nagłówka HTTP, ale bez funkcji
webResource.headers(MultivaluedMap<String, String> headersMap)
Aby rozwiązać problem, próbowałem pobrać konstruktora z WebResource i iterować po nim, dodając nagłówki jeden po drugim
WebResource.Builder builder = webResource.getRequestBuilder();
for(Map.Entry<String, String> headersMapEntry : headersMap.entrySet()){
builder = builder.header(
headersMapEntry.getKey(), headersMapEntry.getValue());
}
Ale wydaje się, że to nie rozwiązuje mojego problemu.
Czy ktoś ma pomysł, jak mogę obejść ten problem z Jersey, aby zrzucić dowolną mapę do nagłówków mojego WebResource?
Dzięki, David.
3 odpowiedzi
Okazało się, że jedynym sposobem na obejście tego jest najpierw wyodrębnienie requestBuildera z webResource za pomocą metody getRequestBuilder(), a następnie użycie requestBuilder do zbudowania i wykonania reszty żądania.
Ponieważ nie możesz wywołać rzeczywistego żądania, jeśli pobrałeś RequestBuilder lub PartialRequestBuilder, musisz pobrać:
WebResource.Builder builder = webResource.getRequestBuilder();
WebResource.Builder ma pobierać, publikować itp.:
response = builder.post(ClientResponse.class, body);
Ten post dokładniej wyjaśnia ten problem i rozwiązanie na przykładach: http:// juristr.com/blog/2015/05/jersey-webresource-ignores-headers/
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].