2016-05-16 17 views
0

Ich baue eine Rest-API mit Spring Boot und wenn ich eine Abfrage mit "?" Zeichen, um die get-Methode mit dem Abfrageparameter "?" Das Zeichen ist nicht codiert.falsche Codierung für "?" Charakter in Rest api

Hier finden Sie meinen Federregler.

@RequestMapping(value = "/response/{query}", method =  RequestMethod.GET,headers="Accept=application/json") 
public QueryRep getResponse(@PathVariable("query") String query) 
{ 
    QueryRep test=new QueryRep(); 
    System.out.println(query); 
// code !! 
return test; 
} 

Wenn ich zum Beispiel testen: Wie heißt ich? Ich erhalte die folgende URL: http://localhost:8080/response/what%20is%20my%20name? und ich bekomme in meiner Konsole die Zeichenfolge "wie heißt ich" (ohne das "?" - Zeichen). Wie Sie das "?" Das Zeichen ist nicht als UTF-8% 3F codiert, während maven (pom.xml) und die IDE (STS) für die Verwendung von UTF-8 konfiguriert sind. Ich benutze Tomcat als Webserver.

Antwort

2

Eine generische URI besteht aus folgenden Komponenten:

Schema: [// [user: password @] host [: port]] [? Query] [/] Pfad [# Fragment]

Beachten Sie die ?query Teil der URI-Definition (siehe https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)

Also die? ist ein reserviertes Token, das das Ende des Pfads und den Anfang der Abfragezeichenfolge markiert. Wenn Sie ein Fragezeichen Zeichen in Ihrem Weg haben wollen müssen Sie es selbst mit dem% 3F codieren, wie zum Beispiel:

http://localhost:8080/response/what%20is%20my%20name%3F

Dann, wenn Sie weiterhin eine Abfrage-String müssen Sie dies tun können:

http://localhost:8080/response/what%20is%20my%20name%3F?myquery=stuff

+0

wenn '?' ist ein gültiger Charakter in URI, also warum ich es in meiner Abfrage nicht bekommen kann, bekomme ich einfach die Frage ohne '?' , Vielen Dank. – desmanda

+0

Antwort aktualisiert, um mehr Details zu geben. – digitaljoel