Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何处理一个“问题”ñ&引用;以“a”的形式出现的字符@“路径变量”;在一个请求中,Spring Boot_Java_Spring_Url_Urlencode - Fatal编程技术网

Java 我如何处理一个“问题”ñ&引用;以“a”的形式出现的字符@“路径变量”;在一个请求中,Spring Boot

Java 我如何处理一个“问题”ñ&引用;以“a”的形式出现的字符@“路径变量”;在一个请求中,Spring Boot,java,spring,url,urlencode,Java,Spring,Url,Urlencode,我有一个RESTController,它具有以下方法: @GetMapping(value = "/equipos/ciudad/{ciudad}", produces = {"application/json"}) public ResponseEntity<List<EquipoBean>> getEquiposByCiudad(@PathVariable(name = "ciudad") String ciudad) { return new Respons

我有一个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);
}
我试着用谷歌搜索答案,但我没有找到解决方案,所以我在这里问,有没有一种方法可以让我的RESTController正确处理这些类型的特殊字符?

你的客户就是这样的字符。所以
ñ
变成
%C3%B1


您似乎正在使用西班牙城市名称作为参数。因此,我将使用
A CoruñA
作为示例。如果您的客户端是用Java编写的,则可以使用:

stringurl=”http://example.org?q=“+urlcoder.encode”(“一个CoruñA”、“UTF-8”);
从Java 10开始,您可以使用:

stringurl=”http://example.org?q=" + 
urlcoder.encode(“A CoruñA”,StandardCharsets.UTF_8);
这样,
A CoruñA
将被编码为
A+Coru%C3%B1a

您的客户就是这样的角色。所以
ñ
变成
%C3%B1


您似乎正在使用西班牙城市名称作为参数。因此,我将使用
A CoruñA
作为示例。如果您的客户端是用Java编写的,则可以使用:

stringurl=”http://example.org?q=“+urlcoder.encode”(“一个CoruñA”、“UTF-8”);
从Java 10开始,您可以使用:

stringurl=”http://example.org?q=" + 
urlcoder.encode(“A CoruñA”,StandardCharsets.UTF_8);

这样,
CoruñA
将被编码为
A+Coru%C3%B1a

问题在于,正如例外情况所说,
ñ
不能出现在有效的URL中。RFC定义了一组非常特定的字符,这些字符是允许的,所有其他字符都需要进行URL编码


因此,解决方案应该是,无论是谁调用您的API,都需要对其请求进行url编码,您的服务就会正常工作。

问题在于,正如异常所说的那样,
ñ
不能出现在有效的url中。RFC定义了一组非常特定的字符,这些字符是允许的,所有其他字符都需要进行URL编码


因此,解决方案应该是,无论是谁调用您的API,都需要对其请求进行url编码,这样您的服务就可以正常工作。

您所说的一切都完全正确。但是我们知道HTTP请求是从代码而不是从浏览器发出的吗?@VGR好吧,OP没有提供任何关于客户端的详细信息。对于Java中的这个例子,我只是想为OP提供一个起点。希望能有所帮助:)你说的每句话都完全正确。但是我们知道HTTP请求是从代码而不是从浏览器发出的吗?@VGR好吧,OP没有提供任何关于客户端的详细信息。对于Java中的这个例子,我只是想为OP提供一个起点。希望能有所帮助:)
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]