Заставь Spring принять UTF-8 Characers в остальных звонках - PullRequest
1 голос
/ 11 октября 2019

Я создаю небольшое приложение 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]

Любые идеи?

1 Ответ

3 голосов
/ 11 октября 2019

Spring жалуется на немецкие умлауты, здесь "ä" не допускается.

Допустимые символы определены в RFC 7230 и RFC 3986

По той же причинеу вас не может быть домена, подобного « dasörtliche.de ».

Возможно, вы могли бы заставить Spring принять Umlauts, но вы нарушите RFC. Мой совет заключается в том, чтобы кодировать ссылки, создаваемые вашим API, в соответствии с RFC (возможно, он уже установлен по умолчанию). Затем клиент должен будет сам кодировать käse в k%C3%A4se (если он сам создает ссылку и не использует ваши ссылки, соответствующие RFC), но любой клиент должен уже привыкнуть к этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...