为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐4208626 2023-10-13 15:18:32
我构建了一个小型 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 的链接),但任何客户端都应该已经习惯了这一点。


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信