这是UriBuilder在JAX-RS中的正确行为吗?

时间:2012-04-06 07:02:12

标签: java jersey 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/"

它应该是这样的还是缺陷(在Jersey 1.11中)?

2 个答案:

答案 0 :(得分:4)

这是泽西岛的一个缺陷,它已经修复:http://java.net/jira/browse/JERSEY-1081

答案 1 :(得分: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上使用它来更有效地创建它的新实例,然后构建一个新实例。所以我觉得这里没必要。