2016-05-16 16 views
0

私はSpringブートでRest APIをビルドしますが、 "?"クエリパラメータを持つgetメソッドをテストする文字 "?"文字はエンコードされません。"?"残りのAPIの文字

ここで私のスプリングコントローラを見つけることができます。

@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; 
} 

たとえば、私がテストした場合、私の名前は何ですか?私は次のURLを取得します: http://localhost:8080/response/what%20is%20my%20name?私のコンソールに文字列 "what is my name"( "?"文字なし)が表示されます。 "?"文字はUTF-8%3Fとしてエンコードされませんが、maven(pom.xml)とIDE(STS)はUTF-8を使用するように構成されています。 TomcatをWebサーバーとして使用しています。

答えて

2

一般的なURIは、次の要素で構成されます

スキーム:[// [ユーザー:パスワード@]ホスト[:ポート]] [/]パス[?クエリ] [#フラグメント]

お知らせURI定義の?query部分(https://en.wikipedia.org/wiki/Uniform_Resource_Identifierを参照)

そう?パスの終わりとクエリ文字列の先頭を示す予約トークンです。あなたは、さらにあなたがそうすることができ、クエリ文字列が必要な場合は、次に

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

:あなたのパス内疑問符を付けたい場合は、次のような、%3Fでそれを自分でエンコードする必要があります。 '?'ならば、 '?'と答えた場合、

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

+0

URIの中で有効なcaracterなので、なぜ私は私の質問でそれを得ることができないのですか? 、ありがとう。 – desmanda

+0

答えが更新されました。 – digitaljoel