オスカー・ガルシア:
私は、次のような方法がありますRESTControllerがあります。
@GetMapping(value = "/equipos/ciudad/{ciudad}", produces = {"application/json"})
public ResponseEntity<List<EquipoBean>> getEquiposByCiudad(@PathVariable(name = "ciudad") String ciudad) {
return new ResponseEntity<>(service.getEquiposByCiudad(ciudad), HttpStatus.OK);
}
私は、通常の文字を送信する場合には、それらの間のスペースで複数の単語があっても動作しますが、私はそれを私はこのような例外を取得し、「N」の文字を送信する場合:
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:475) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
私は答えを検索するための周りグーグルで試みたが、私はここに求めているので、私は解決策を取得していない、私は適切に特殊文字のこれらのタイプを処理するために、私のRESTControllerを設定するための方法は何ですか?
cassiomolin:
あなたのクライアントがされ期待にURLエンコードなどの文字。そうñ
なりました%C3%B1
。
あなたは、パラメータとしてスペインの都市名を使用しているように見えます。だから私は、使用するA Coruña
例として。あなたのクライアントはJavaで書かれている場合は、使用することができますURLEncoder
:
String url = "http://example.org?q=" + URLEncoder.encode("A Coruña", "UTF-8");
Javaの10以降では、使用することができます。
String url = "http://example.org?q=" +
URLEncoder.encode("A Coruña", StandardCharsets.UTF_8);
それによって、A Coruña
にエンコードされますA+Coru%C3%B1a
。