我构建了一个小型 Spring-Boot 应用程序,并且遇到了 utf-8 编码字符的问题。在我的控制器中我有一个类似的方法@DeleteMapping("deleteIngredient/{ingredientId}")public void delteIngredient(@PathVariable final String ingredientId) { ingredientService.delteIngredient(ingredientId);}但打电话的localhost:8080/deleteIngredient/käse结果是java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:475) ~[tomcat-embed-core-9.0.22.jar:9.0.22]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) ~[tomcat-embed-core-9.0.22.jar:9.0.22]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.22.jar:9.0.22]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) [tomcat-embed-core-9.0.22.jar:9.0.22]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) [tomcat-embed-core-9.0.22.jar:9.0.22]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.22.jar:9.0.22]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_221]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_221]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.22.jar:9.0.22]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]有任何想法吗?
1 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
Spring 在这里抱怨德语元音变音,“ä”是不允许的。
有效字符在 RFC 7230 和 RFC 3986 中定义
同样的原因,您不能拥有像“ dasörtliche.de ”这样的域名。
您可能可以强制 spring 接受变音符号,但您会违反 RFC。我的建议是对你的 api 生成的链接进行编码,使其符合 RFC(可能已经是 spring 默认的)。然后,客户端需要käse
对其k%C3%A4se
自身进行编码(如果它自己构建链接并且不使用符合 RFC 的链接),但任何客户端都应该已经习惯了这一点。
添加回答
举报
0/150
提交
取消