【问题标题】:Exception is thrown when input with % is send to the back end - Thymeleaf将带有 % 的输入发送到后端时引发异常 - Thymeleaf
【发布时间】:2022-03-11 21:01:25
【问题描述】:

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

 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 方法将数据发送到后端之前对数据进行编码,并且在链接中 % 变为 %25 ,这是正确的编码值,但为什么它会引发异常以及可能的解决方案是什么我没有主意了。

提前感谢您的回复:)

【问题讨论】:

    标签: java html spring-boot character-encoding thymeleaf


    【解决方案1】:

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

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

    但是应用程序现在是否有可能尝试解码数据本身并且只看到 % 符号?然后它会返回您所看到的错误。

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

    【讨论】:

    • 如果我措辞不好,我很抱歉。所以我有 5 个输入文本,这些输入文本是 FilterDto 的对应字段,用于根据它们的值过滤数据。现在,当我在任何文本字段中插入 % 并向后端发送请求时,我会收到此异常。在数据发送到后端之前,使用 encodeURIComponent 方法进行编码。双重编码不会导致我的 URL 出现问题吗?这些输入文本值存在于页面的 URL 中(以其编码格式)
    • 所以我猜对了某些 URL 中出现的字符。如果对值进行双重编码会怎样?
    • 您是正确的双重编码和解码工作,除了 GetMapping (其中 url 值被发送到后端部分编码)部分需要解码一次(因为浏览器自动执行初始解码)。可悲的是,这是我希望修复的 Thymeleaf 错误:github.com/thymeleaf/thymeleaf-spring/issues/255
    【解决方案2】:

    更改您的百里香叶版本。

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

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

    【讨论】:

    • 当时我设法通过将有效负载转换为 JSON 并绕过整个 thymeleaf 问题来解决此问题。不过谢谢你的回答:)
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多