Ich versuche, eine Methode zu finden, die eine URL analysieren, dekodieren und die dekodierten Komponenten auf eine eindeutige Weise zurückgeben würde.Wie parsen und dekodieren Sie URI in Java zu URI-Komponenten?
URLDecoder ist nicht eine richtige Passform, weil es mehrdeutige String, z.
URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8")
kehrt:
http://www.google.com?q=abc&def
So sind die Informationen über entkam & verloren.
Ich möchte etwas haben, wie:
DecodedUrlComponents cmp = GreatURLDecoder.decode(url);
Map<String, List<String>> decodedQuery = cmp.getQuery();
decodedQuery.get("q").get(0); //returns "abc&def"
Wie erreichen ich das?
EDIT: Danke für die Antworten, aber meine Frage war ein bisschen anders: Ich möchte bekommen decodiert Komponenten in eindeutiger Weise, so dass weder der folgenden tut, was ich brauche:
new URI("http://www.google.com?q=abc%26def").getRawQuery()
kehrt codierte Abfrage:q=abc%26def
new URI("http://www.google.com?q=abc%26def").getQuery()
kehrt mehrdeutig Wert:q=abc&def
URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8")
kehrt mehrdeutig Wert:http://www.google.com?q=abc&def
org.springframework.web.util.UriComponentsBuilder.fromUriString("http://www.google.com?q=abc%26def").build(true).getQueryParams()
- in der Nähe, aber immer noch nicht, was ich will, weil es eine Karte von codierten params liefert:{q=[abc%26def]}
Danke, es sieht aus wie es seine Arbeit macht.Ich bin nicht sehr glücklich damit - die Abhängigkeit von JAX-RS nur für das Parsen und Entschlüsseln von URLs scheint ein Overkill – tomkur
Einverstanden, es ist eine ganze Reihe von Extras. Sie könnten besser die Klasse einfach aus ihrem Quell-Repository kopieren und nur diese einschließen. – Petter
Auch wenn Sie Jersey 2 anstelle von RESTEasy für JAX-RS verwenden, können Sie 'org.glassfish.jersey.uri.UriComponent.decodeQuery (URI, boolean)' und verwandte 'decode * 'Methoden verwenden. –