首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring /spring:如何设置控制器方法的uriencoding

spring /spring:如何设置控制器方法的uriencoding
EN

Stack Overflow用户
提问于 2014-08-14 17:36:38
回答 1查看 1.2K关注 0票数 3

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

代码语言:javascript
复制
@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();
    }
            ...

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

代码语言:javascript
复制
  find author lastname: ШÑ<U+0082>Ñ<U+0080>ембеÑ<U+0080>г
  lastnameISOtoUTF8: Штремберг

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

并确保将所有的庆祝活动都设置为UTF-8:

web.xml:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
...
<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论点:

代码语言:javascript
复制
/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:

代码语言:javascript
复制
$ echo $LANG  en_US.utf8

我不知道该怎么做才能摆脱spring有趣的ISO-8859-1解码,我想.有什么想法吗?我在看什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 16:05:36

我也有过同样的问题,在经过大量的研究后,我意识到问题在于Tomcat连接器。我尝试了所有的方法,但只在"server.xml“中添加了以下修复方法

代码语言:javascript
复制
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

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

而且,最初的<connector ... URIEncoding="UTF-8"/>更新不起作用,但这是因为我的Tomcat "server.xml“被夸大了,所以要确保不是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25314177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档