2012-04-06 4 views
4

Erstes Beispiel:ist es ein korrektes Verhalten von UriBuilder in JAX-RS?

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

Zweites Beispiel:

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

es so sein sollte, oder es ist ein Fehler (in Jersey 1.11)?

+0

nach Jersey Team des Berichts: http://java.net/jira/browse/JERSEY-1081 – yegor256

+0

Vielen Dank für diese Einreichung. Es ist jetzt in Jersey Kofferraum fixiert. –

Antwort

0

Nun, ich kann nicht sagen, warum dies geschieht, aber die clone Methode ist völlig nutzlos hier:

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 

und sogar

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

UPD. über clone() Methode:

Erstellen Sie eine Kopie der UriBuilder seinen Zustand zu bewahren

So sollte es auf bestehenden uri verwendet werden, um eine neue Instanz sie effizienter zu erstellen, dann ein neues Gebäude. Also denke ich, dass es hier unnötig ist.

+0

Danke für die Erklärung der Bedeutung von 'clone()' Methode :) Ich weiß, wofür es ist, der obige Code ist nur ein Beispiel. In einem realen Projekt ist das Szenario viel komplexer und die Methode clone() 'wird absichtlich verwendet – yegor256

+0

, also sollten Sie es vielleicht nach dem Erstellen eines wertvollen Objekts verwenden? Nicht vor der 'build()' Methode? –

+0

Vielleicht sollte Jersey nach JAX-RS-Spezifikation arbeiten? – yegor256

Verwandte Themen