Jax-rs automatisches Pfadpfaddekodieren

8

Ich habe einen jax-rs-Dienst, der eine Reihe von Parametern im path pathparameters empfängt. Diese Parameter können Strings sein, die Werte enthalten, die für URLs nicht geeignet sind. Daher werden sie auf der Client-Seite mit dem java.net.UrlEncoder wie folgt urlencodiert:

%Vor%

Dies wird verwendet, um die URL supplier/group/param1/param2/param3 zu erstellen. Wenn einer davon aufgrund der Urlencodierung geändert wird, beispielsweise wenn es nur ein Leerzeichen ist, ist die Zeichenfolge, die für den Dienst empfangen wird, ein + -Zeichen.

%Vor%

Ich würde erwarten, dass Jaxrs automatisch codierte Pfadparameter dekodieren.

BEARBEITEN: Etwas mehr getestet, entdeckte ich, dass es beim Senden mit %20 für den Space den Parameter dekodieren kann.

    
Runar Halse 29.11.2012, 13:33
quelle

2 Antworten

11

Die automatische Kodierung von pathparams funktioniert wie erwartet. Das Problem war, dass %20 verwendet wird, um Leerzeichen in der URL selbst zu codieren, während + verwendet wird, um die Abfragezeichenfolge zu verschlüsseln (der Teil nach dem?). Pathparams sind wirklich Teile der URL, daher sollte% 20 verwendet werden.

Wenn Sie URI.toAsciiString() anstelle von UrlEncoder.encode(...) verwenden und die verschiedenen Teile übergeben, erhalten Sie eine gültige URL, die korrekt dekodiert wird.

    
Runar Halse 03.12.2012, 13:22
quelle
3

Zitat aus PathParam javadoc:

  

Der Wert ist URL-entschlüsselt, es sei denn, dies wird mithilfe der codierten Annotation deaktiviert.

    
yegor256 29.11.2012 18:35
quelle

Tags und Links