2012-04-06 2 views
4

Первый пример:Правильное поведение UriBuilder в JAX-RS?

UriBuilder.fromUri("http://localhost") 
    .queryParam("foo", "test") 
    .clone() 
    .build() 
// equals to: "http://localhost/?foo=test" 

Второй пример:

UriBuilder.fromUri("http://localhost") 
    .replaceQueryParam("foo", "test") 
    .clone() 
    .build() 
// equals to: "http://localhost/" 

Это должно быть так, или это дефект (в Джерси 1.11)?

+0

Сообщил в Джерси команде: http://java.net/jira/browse/JERSEY-1081 – yegor256

+0

Спасибо за подачу этого. Теперь он закреплен на стволе Джерси. –

ответ

0

Ну, я не могу сказать, почему это происходит, но метод clone совершенно бесполезно здесь:

URI uri1 = UriBuilder.fromUri("http://localhost") 
.queryParam("foo", "test") 
.build(); 
//prints http://localhost?foo=test 

URI uri2 = UriBuilder.fromUri("http://localhost") 
.replaceQueryParam("foo", "2") 
.build(); 
//prints http://localhost?foo=2 

и даже

URI uri2 = UriBuilder.fromUri(uri1) 
.replaceQueryParam("foo", "2") 
.build(); 
//prints http://localhost?foo=2 

UPD. о clone() метод:

Создать копию UriBuilder сохранения его состояния

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

+0

Спасибо за объяснение смысла метода clone() :) Я знаю, для чего это, код, приведенный выше, является просто примером. В реальном проекте сценарий намного сложнее, и метод 'clone()' используется специально – yegor256

+0

, так что, может быть, вы должны использовать его после создания ценного объекта? Не раньше метода 'build()'? –

+0

Может, Джерси должен работать в соответствии с спецификацией JAX-RS? – yegor256

Смежные вопросы