【问题标题】:spring roo/spring mvc: how can i set uriencoding for controller methodspring roo/spring mvc:如何为控制器方法设置 uriencoding
【发布时间】:2014-08-14 17:36:38
【问题描述】:

我有一个在 tomcat 7 中运行的 spring roo web 应用程序。我有一个 spring roo 生成的控制器方法,我将其用于调试问题:

@RequestMapping(params = "find=ByFirstNameEqualsAndLastNameEquals", method = RequestMethod.GET)
public String findAuthorsByFirstNameEqualsAndLastNameEquals(
        @RequestParam("firstName") String firstName,
        @RequestParam("lastName") String lastName,
        @RequestParam(value = "page", required = false) Integer page,
        @RequestParam(value = "size", required = false) Integer size,
        @RequestParam(value = "sortFieldName", required = false) String sortFieldName,
        @RequestParam(value = "sortOrder", required = false) String sortOrder,
        Model uiModel
        ) {

    System.out.println("find author lastname: " + lastName);
    String lastNameUTF8 = null;
    String firstNameUTF8 = null;
    try {
        lastNameUTF8 = new String(lastName.getBytes("ISO-8859-1"), "UTF-8");
        System.out.println("lastnameUTF8: " + lastNameUTF8);
        firstNameUTF8 = new String(firstName.getBytes("ISO-8859-1"),
                "UTF-8");
        System.out.println("lastnameISOtoUTF8: " + firstNameUTF8);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
            ...

正如人们在日志中看到的那样:

  find author lastname: ШÑ<U+0082>Ñ<U+0080>ембеÑ<U+0080>г
  lastnameISOtoUTF8: Штремберг

请求参数 firstName 和 lastName 编码为 ISO-8859-1,但我希望它们编码为 UTF-8。我想我看到了大多数类似的问题

并确保将所有配置设置为 UTF-8:

web.xml:

<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>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

tomcats server.xml:

...
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
          URIEncoding="UTF-8"
...
<!-- Define an AJP 1.3 Connector on port 8009 -->
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
   URIEncoder="UTF-8"
/>

java 参数:

/usr/local/jdk7/bin/java -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 /usr/local/tomcatODM_TEST/bin/bootstrap.jar:/usr/local/tomcatODM_TEST/bin/tomcat ...  org.apache.catalina.startup.Bootstrap start

浏览器编码也设置为 UTF-8,服务器和客户端上的系统 LANG:

$ echo $LANG  en_US.utf8

我不知道还有什么办法可以摆脱我猜想的 spring mvc 的那个有趣的 ISO-8859-1 解码...... 有任何想法吗?我在看什么?

【问题讨论】:

  • 浏览器呢?
  • 是我检查的第一件事:它的编码也设置为 UTF-8。用不同的浏览器测试。我想那是错误的地方,因为我将 UTF-8 编码为 ISO-8859-1。
  • 那么 html 呢?
  • 我想这也是错误的地方,因为我将 UTF-8 编码为 ISO-8859-1。

标签: spring spring-roo http-request-parameters uriencoding


【解决方案1】:

我遇到了同样的问题,经过大量研究后发现问题出在 Tomcat 连接器上。我尝试了所有方法,但仅将以下内容添加到“server.xml”中

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

在 Spring 中不能设置一些东西来设置 URIEncoding,这很烦人。

另外,最初 &lt;connector ... URIEncoding="UTF-8"/&gt; 更新不起作用,但这是因为我的 Tomcat“server.xml”被覆盖,所以请确保不是这种情况。

【讨论】:

  • 你是对的。不知何故它被覆盖了......谢谢:)
猜你喜欢
  • 2015-04-24
  • 1970-01-01
  • 2011-07-13
  • 2013-10-26
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多