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.
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.
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.