Jax-rs automatische decodieren pathparam
Ich habe eine jax-rs-service empfängt eine Reihe von Parametern, die in den Weg, pathparameters. Diese Parameter können strings sein, die Werte enthalten, nicht geeignet für urls, so dass Sie urlencoded auf der client-Seite mit dem java.net.UrlEncoder etwa so:
String param = URLEncoder.encode(o.toString(), "UTF-8");
Diese wird genutzt, um die url supplier/group/param1/param2/param3
. Wenn man diese geändert werden aufgrund der urlencoding, zum Beispiel, wenn es ist nur ein Raum, die Zeichenfolge empfangen, die in dem service eine +
Zeichen.
@GET
@Path("{supplierId}/{groupCode}/{groupId}")
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public SupplierGroup getSupplierGroup(@PathParam("supplierId") BigDecimal supplierId,
@PathParam("groupCode") String groupCode,
@PathParam("groupId") BigDecimal groupId) {
//now groupCode is "+", not " "
}
Ich würde erwarten, dass jaxrs automatisch Dekodieren von codierten Pfad params.
BEARBEITEN:
Testen ein bisschen mehr entdeckte ich, dass beim senden mit %20
für den Raum, es ist in der Lage zu entschlüsseln die param.
- Mit
URI.toAsciiString
funktioniert nicht immer. Die Antwort von @yegor256 ist robuster, fügen Sie die@Encoded
Anmerkung über die Funktion decaration
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die automatische Codierung von pathparams funktioniert wie erwartet. Das problem war, dass
%20
wird verwendet, um codieren Leerzeichen in der url selbst, während+
wird verwendet, um codieren die query-string(der Teil nach dem ?). Pathparams sind wirklich Teile der URL, also %20 verwendet werden soll.Mit
URI.toAsciiString()
stattUrlEncoder.encode(...)
und die übergabe der verschiedenen Teile gibt, der eine gültige url ist korrekt dekodiert.Zitat von PathParam javadoc:
@Encoded
Anmerkung über die Deklaration der Funktion. Das war genug für den Parameter stop decodiert wird, um unicode-aus%XX
ASCII-codierte Zeichen