当带有 % 的输入被发送到后端时抛出异常 - Thymeleaf

Exception is thrown when input with % is send to the back end - Thymeleaf

我有一些 html 文本输入,可以将数据发送到后端 spring 系统。当我只输入 (%) 作为字符时,出现以下异常:

 java.lang.IllegalArgumentException: Incomplete escaping sequence in input
14:17:34,269 INFO  [stdout] (default task-4)    at org.unbescape.uri.UriEscapeUtil.unescape(UriEscapeUtil.java:617)
14:17:34,269 INFO  [stdout] (default task-4)    at org.unbescape.uri.UriEscape.unescapeUriQueryParam(UriEscape.java:1702)
14:17:34,269 INFO  [stdout] (default task-4)    at org.unbescape.uri.UriEscape.unescapeUriQueryParam(UriEscape.java:1668)
14:17:34,269 INFO  [stdout] (default task-4)    at org.thymeleaf.spring5.util.SpringRequestUtils.checkViewNameNotInRequest(SpringRequestUtils.java:55)
14:17:34,269 INFO  [stdout] (default task-4)    at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:275)
14:17:34,269 INFO  [stdout] (default task-4)    at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190)

我在使用 JS 的 encodeURIComponent 方法将数据发送到后端之前对数据进行编码,在 link 中,% 变为 %25,这是正确的编码值,但为什么它抛出异常以及什么是这个问题的可能解决方案我没有想法tbh。

提前感谢您的回复:)

除了“当我把一个 (%) 作为字符”和“我正在对数据进行编码”之外,您没有透露更多信息。

我的 crystal 灯泡告诉我有一些 http(s) 请求,其中一个请求参数只包含一个编码的百分号。当服务器解析此请求时,%25 被解码回 %。目前没问题。

但有没有可能应用程序现在尝试自行解码数据而只看到 % 符号?然后它会返回您看到的错误。

在这种情况下,您可能需要双重编码:% -> %25 -> %2525

更改您的 thymeleaf 版本。

<properties>
    <thymeleaf.version>3.0.13.RELEASE</thymeleaf.version>
</properties> 

有关此错误的更多信息,您可以阅读它。希望它能解决您的问题。[Thymeleaf Issue#255] [1]: https://github.com/thymeleaf/thymeleaf-spring/issues/255