Как заставить джерси принимать символ ">" в ​​параметре запроса

Я столкнулся с проблемой с Джерси в клиенте, мне нужно передать какой-то фильтр даты в качестве параметра, он содержит "=>" и Джерси жалуется:

Caused by: java.lang.IllegalArgumentException: Path segment is null
at com.sun.jersey.api.uri.UriBuilderImpl.appendPath(UriBuilderImpl.java:547)

Сам запрос выглядит следующим образом:

CustomData dat = getWebResource()
            .path(path)
            .queryParam("display","full")
            .queryParam("date","1")
            .queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
            .queryParam("filter[valid]","1")
            .type(MediaType.APPLICATION_XML).get(CustomData.class);

После некоторых попыток я понял, что причиной проблемы является ">" (также неверно закодирован пробел в дате). Если я удалю его, Джерси в порядке, но веб-сервис не работает. Есть ли особый способ передачи параметров, которые имеют "=>" вместо "="? Когда я пробую URL прямо в браузере, он работает:

http://www.xxxx.com/api/orders/?display=full&date=1&filter[date_upd]=>[2016-01-08%2010:32:00]&filter[valid]=1

если я создаю URL с UriBuilder как таковой:

uri = UriBuilder.fromPath("http://www.xxxx.com/api/"+Order.URLORDER)
                .queryParam("display","full")
                .queryParam("date","1")
                .queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
                .queryParam("filter[valid]","1").build();            
System.out.println(uri.toASCIIString());
//http://www.xxxx.com/api/orders/?display=full&date=1&filter%5Bdate_upd%5D=%3E%5B2016-01-08+10:32:00%5D&filter%5Bvalid%5D=1

И попробуйте это в браузере, это тоже работает, но если я использую URI в запросе, то запрос снова не проходит. Проблема должна быть где-то еще.

URI uri = UriBuilder.fromPath("http://www.xxxx.com/api/"+Order.URLORDER)
                .queryParam("display","full")
                .queryParam("date","1")
                .queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
                .queryParam("filter[valid]","1").build();        
CustomData dat = getWebResource().uri(uri).type(MediaType.APPLICATION_XML).get(CustomData.class); 

Любая идея?

также пытался

.queryParam("filter[date_upd]",URLEncoder.encode(">[2016-01-08 10:32:00]", "UTF-8"))

а также

.queryParam("filter[date_upd]",URLEncoder.encode("%3E[2016-01-08 10:32:00]", "UTF-8"))

С той же ошибкой "сегмент пути нулевой"

1 ответ

После дополнительного расследования выяснилось, что проблема с Джерси была связана с неправильным возвратом схемы (потому что или с параметром), что касается веб-службы, которую я наконец-то получил, заменив пробел знаком "+" перед кодированием и используя UriComponent.encode с UriComponent. Введите.FRAGMENT для параметра, содержащего '>':

        CustomData dat = getWebResource()
            .path(path)
            .queryParam("date","1")
            .queryParam("filter[date_upd]",UriComponent.encode(">[2016-01-08+10:32:00]", UriComponent.Type.FRAGMENT))
            .queryParam("filter[valid]","1")
            .type(MediaType.APPLICATION_XML)
            .get(CustomData.class);   
Другие вопросы по тегам