Как переопределить заголовок ответа в клиенте джерси - PullRequest
2 голосов
/ 18 июля 2011

У меня есть клиент-джерси, с которым я пытаюсь разобрать объект ответа.Проблема заключается в том, что удаленный веб-сервис отправляет назад application / octet-stream в качестве типа контента, поэтому Джерси не знает, как его отменять (у меня есть похожие ошибки с возвращением text / html для XML и тому подобного).Я не могу изменить веб-сервис.

Я хочу переопределить тип контента и изменить его на application / json, чтобы Джерси знал, какой маршаллер использовать.

Я не могу зарегистрировать приложение/ octet-stream с маршаллером json для заданного типа контента, который я действительно мог бы получать всевозможные странности.

Ответы [ 3 ]

5 голосов
/ 19 сентября 2011

Как указал laz, ClientFilter - это путь:

client.addFilter(new ClientFilter() {
    @Override
    public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
        request.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, "application/json");
        return getNext().handle(request);
    }
});
1 голос
/ 17 сентября 2015

В Java 8 и Jersey 2 вы можете сделать это с помощью лямбды:

client.register((ClientResponseFilter) (requestContext, responseContext) ->
                responseContext.getHeaders().putSingle("Content-Type", "application/json"));
1 голос
/ 18 июля 2011

Я не очень хорошо разбираюсь в клиентском API Джерси, но вы можете использовать ClientFilter для этого?Возможно, вы могли бы добавить свойство к запросу через ClientRequest.getProperties().put(String, Object), которое сообщает ClientFilter, что Content-Type переопределить ответ.Если ClientFilter находит свойство переопределения, оно использует его, в противном случае оно не изменяет ответ.Я не уверен, что ClientFilter вызывается до любого демаршаллинга.Надеюсь, что это так!

Редактировать (Вы пробовали что-то подобное):

public class ContentTypeClientFilter implements ClientFilter {
    @Override
    public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
        final ClientResponse response = getNext().handle(request);

        // check for overridden ContentType set by other code
        final String overriddenContentType = request.getProperties().get("overridden.content.type");
        if (overriddenContentType != null) {
            response.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, overriddenContentType);
        }
        return response;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...