0
URLに有効なJSONが含まれている場合、GETリクエストにRestTemplateを使用する必要があるとします。例のURLは次のとおりです。URLにJSONが含まれている場合のRestTemplateのパターンマッチングの処理
http://example.com/?json={"property1":{"property2":0},"property3":{"property4":0.0,"property5":0.0}}
コード:
String url = "http://example.com/?json={\"property1\":{\"property2\":0},\"property3\":{\"property4\":0.0,\"property5\":0.0}}";
RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template.getForEntity(url, String.class);
例外:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 32
\Qhttp://example.com/?json=\E({"property2":0)\Q,"property3":\E(0.0,"property5":0.0)\Q}\E
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.closure(Pattern.java:3157)
at java.util.regex.Pattern.sequence(Pattern.java:2134)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.group0(Pattern.java:2905)
at java.util.regex.Pattern.sequence(Pattern.java:2051)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at org.springframework.web.util.UriTemplate$Parser.getMatchPattern(UriTemplate.java:247)
at org.springframework.web.util.UriTemplate$Parser.access$200(UriTemplate.java:196)
at org.springframework.web.util.UriTemplate.<init>(UriTemplate.java:70)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:471)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:260)
RestTemplate全体ではなく、URLの、JSONの初めまでのURLを引用しています。実験的に、中括弧が問題であることを知っています。しかし、それらをバックスラッシュでエスケープしても、問題は解決しません。
String url = "http://example.com/?json=\\{\"property1\":\\{\"property2\":0\\}\\}";
RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template.getForEntity(url, String.class);
例外:次のコードは、 "閉じられていないグループ" 例外を生成
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 56
\Qhttp://example.com/?json=\\E(\{"property2":0\)\Q\}\E
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.accept(Pattern.java:1813)
at java.util.regex.Pattern.group0(Pattern.java:2908)
at java.util.regex.Pattern.sequence(Pattern.java:2051)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at org.springframework.web.util.UriTemplate$Parser.getMatchPattern(UriTemplate.java:247)
at org.springframework.web.util.UriTemplate$Parser.access$200(UriTemplate.java:196)
at org.springframework.web.util.UriTemplate.<init>(UriTemplate.java:70)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:471)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:260)
at com.ebay.sdo.misc.ThemisTest.main(ThemisTest.java:55)
にはどうすればRestTemplateが正しくURLを引用することができますか?
は、なぜあなたは、URLで' json'を組み込むために必要なのですか? – NiVeR
残念ながら、APIがどのように設計されているのですか? – Ozilophile
David S.が指摘しているように、URLエンコーディングはキーです。しかし、APIの設計には疑問があります。また、ブラウザ/サーバーには文字数制限があります。 POSTメソッドを持つリクエストボディははるかに意味があります – Hirako