java - 让 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]
有任何想法吗?
解决方案
春天在这里抱怨德国变音符号,“ä”是不允许的。
有效字符在 RFC 7230 和 RFC 3986 中定义
同样的原因,您不能拥有像“ dasörtliche.de ”这样的域。
您可能可以强制 spring 接受 Umlauts,但您会违反 RFC。我的建议是将您的 api 生成的链接编码为符合 RFC(可能已经默认)。然后客户端需要对自己进行编码käse
(k%C3%A4se
如果它自己构建链接而不使用符合 RFC 的链接),但任何客户端都应该已经习惯了。
推荐阅读
- python - Python使用dlib裁剪人脸图像
- testing - 有哪些方法可以运行 Rust cargo 测试并让测试运行器将任何日志输出显示到控制台 stdout 或 stderr?
- javascript - jquery问题=>更改不适用于追加
- xamarin - Xamarin.Forms.CarouselView 抛出异常
- email - 如何使用 MailKit 和 imap 将消息移动/复制到另一个用户的邮箱?
- graphql - Strapi GraphQL - 如何返回媒体库对象
- vba - MS Access VBA - 检测子表单记录上的活动格式条件
- ruby-on-rails-4 - 在 Rails 中为 magento 集成创建签名 hmac-sha1
- javascript - 用javascript对数组进行螺旋排序
- angular - 单击按钮后如何防止requestAnimationFrame重绘画布一次以上?