让 Spring 在其余调用中接受 UTF-8 字符

我构建了一个小型 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 3986

at 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]

有任何想法吗?


慕姐4208626
浏览 92回答 1
1回答

江户川乱折腾

Spring 在这里抱怨德语元音变音,“ä”是不允许的。有效字符在 RFC 7230 和 RFC 3986 中定义同样的原因,您不能拥有像“ dasörtliche.de ”这样的域名。您可能可以强制 spring 接受变音符号,但您会违反 RFC。我的建议是对你的 api 生成的链接进行编码,使其符合 RFC(可能已经是 spring 默认的)。然后,客户端需要käse对其k%C3%A4se自身进行编码(如果它自己构建链接并且不使用符合 RFC 的链接),但任何客户端都应该已经习惯了这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java