当 url 中包含外语字符 (تشكيل) 时,Spring 应用程序不会重定向

发布于 2024-10-21 04:47:59 字数 166 浏览 7 评论 0原文

我有一个 Spring 应用程序,它工作正常,除了它如何处理控制器重定向用户时需要包含在重定向 url 中的外语字符。

例如,如果控制器将用户重定向到以下 URL,则会失败:

http://localhost:8080/diacritic/تشكيل

I have a Spring app that is working correctly except for how it deals with foreign language characters that need to be included in the redirect url when the controller redirects the user.

If the controller redirects the user to the following URL, for example, it will fail:

http://localhost:8080/diacritic/تشكيل

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风挽心 2024-10-28 04:47:59

您需要重新编码重定向目标。

我有这样的代码:

String encodedId = URLEncoder.encode("中文", "UTF-8");
ModelAndView m = new ModelAndView(new RedirectView("/view/" + encodedId, true, true, false));
return m;

这对我有用。

You need to re-encode the redirection target.

I have code like this:

String encodedId = URLEncoder.encode("中文", "UTF-8");
ModelAndView m = new ModelAndView(new RedirectView("/view/" + encodedId, true, true, false));
return m;

This worked for me.

箜明 2024-10-28 04:47:59

路径变量在 ISO-8859-1 中解码。您可以采取两件事来解决这个问题。

  1. 要查看服务器上实际的 UTF-8 解码字符,您可以执行此操作并查看该值(您需要将“HttpServletRequest httpServletRequest”添加到控制器参数中):

    String requestURI = httpServletRequest.getRequestURI();
    String已解码URI = URLDecoder.decode(requestURI, "UTF-8");
    

    既然服务器上已经有了正确的数据,那么您就可以做任何您想做的事情了。

  2. 您还可以尝试向 web.xml 文件添加过滤器。

<前><代码><过滤器>
<过滤器名称>CharacterEncodingFilter
<过滤器类>org.springframework.web.filter.CharacterEncodingFilter
<初始化参数>
<参数名称>编码
<参数值>UTF-8


<过滤器映射>
<过滤器名称>CharacterEncodingFilter
/*;

The path variable is decoded in ISO-8859-1. There are two things you can do to get around this.

  1. To see the actual UTF-8 decoded characters on the server, you can just do this and take a look at the value (you need to add "HttpServletRequest httpServletRequest" to your controller parameters):

    String requestURI = httpServletRequest.getRequestURI();
    String decodedURI = URLDecoder.decode(requestURI, "UTF-8");
    

    You can then do whatever you want, now that you have the right data on the server.

  2. You can also try adding a filter to your web.xml file.

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文