当前位置: 首页 > 知识库问答 >
问题:

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

戚阳
2023-03-14

我有一个运行在tomcat 7中的spring roo webapplication。在这里,我有一个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: Штремберг

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

  • Spring MVC URIEncode无法正确发送请求参数
  • Spring/Rest@PathVariable字符编码
  • 查询字符串由Spring Framework解码
  • URIEncode='UTF-8'是如何工作的?
  • ...

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

网状物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服务器。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,服务器和客户端上的系统语言:

$ echo $LANG  en_US.utf8

我不知道还能做什么来摆脱Springmvc的有趣的ISO-8859-1解码...有什么想法吗?我忽略了什么?

共有1个答案

汝开畅
2023-03-14

我也有同样的问题,经过大量研究,我意识到问题出在Tomcat连接器上。我尝试了所有方法,但只添加了以下内容,将其固定在“server.xml”

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

令人烦恼的是,您无法在Spring中设置某些内容来设置URIEncode。

此外,最初

 类似资料:
  • 我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦

  • 我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?

  • 问题内容: 谈话很便宜,请先显示我的代码: HTML: 指示: }); 控制器: 现在工作了,当我单击加号图标时,浏览器控制台输出“添加”。 但我想将控制器动态设置为指令,如下所示: HTML: 控制器: 指令喜欢: 如何实现我的目标?感谢您的回答! 问题答案: 现在可以使用AngularJS。在指令中你只需要添加两个新的属性叫 ,财产,也正好在这里需要。 指令中要注意的重要事项 设置指令动态控制

  • 英文原文: http://emberjs.com/guides/routing/setting-up-a-controller/ URL的改变同时也可能改变显示的模板。而模板只有当其搭载了需要呈现的信息才有用。 在Ember.js中,模板从控制器中获取需要呈现的信息。 内置的两个控制器Ember.ObjectController和Ember.ArrayController,使控制器可以非常方便的呈

  • 问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。

  • 本文向大家介绍JavaScript 控制字体大小设置的方法,包括了JavaScript 控制字体大小设置的方法的使用技巧和注意事项,需要的朋友参考一下 在做公司的官网的时候,新闻内页会有一个让浏览者自己调整文字大小的功能,因此在这个空闲时间,把这个功能整理下来: 调用方式: 提示:可以通过font-size:0的方式来隐藏Input元素的value值,然后自定义按钮的样式。 以上这篇JavaScr