您的位置:首页 > 运维架构 > Tomcat

Spring Tomcat Post Get 请求参数有中文时出现乱码或+号变空格等关于编码的问题

2017-09-22 18:40 1181 查看

  今天做Post,get请求的测试,出现了如题的错误,记录一下,能力有限如有错误的请大家指正,谢谢!

系统环境:服务器:Contos7,tomcat7,spring4.3.8,maven  IDE:intellijj idea 2017.1.2

客户机:win7,android studio2.31

操作:客户机在android里面用HttpURLConection发送请求,与编码有关的东西测试如下:

在服务器端的tomcat目录下,conf下server.xml修改<Connector ... URIEncoding="UTF-8">这个参数是设置,

1、get请求时,所接收到的客户机发过来的参数是什么编码格式。如果客户机get时的参数有中文就是用,

URLEncode.encode("中文参数",“utf-8”),将参数转成UTF-8格式的,然后服务器Tomcat就要设置URIEncoding="UTF-8"这个参数。

这个是GET请求的,相对来说比较简单。

2、Post请求时,有关参数与Get的设置是不一样的注意了。

首先,如果客户端Post中文参数时可以直接Post中文过去,可以不用转编码,但如果参数中有+号或&号,这两个符号要用在你Post

参数到服务器之前要把这两个字符用下面的方法要替换

param=param.replace("+","%2B");

param=param.replace("&","%26");

这样,要不然服务器接到到这两个字符会直接替换成空格。具体原因不知,找了很多地方没解决,所以直接用replace来替换,特别注意一下。

我一直很奇怪不知是哪个地方设置的,可以直接Post中文过去而不用转码,因为系统会自动帮你转码。(一直没找到在哪里设置的,如果有大神知道,教下小弟)

post请求的返回值如果是中文的话,可以在web.xml里配置一个过滤器,这样可以定义返回值是你想要的编码。

<filter>

<filter-name>charsetFilter</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>

客户端接到到服务器的返回数据,再UFT-8回来就是你要想要的结果了。

另外,如果你的返回值是实体类或者List,MAP等类型的话,要可以在 Spring里添加一个转换器,它会自动将这些类型,转成Json字符。

转换器:

<mvc:annotation-driven>

        <mvc:message-converters register-defaults="true">

            <!-- 配置Fastjson支持 -->

            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">

                <property name="supportedMediaTypes">

                    <list>

                        <value>text/html;charset=UTF-8</value>

                        <value>application/json</value>

                    </list>

                </property>

            </bean>

        </mvc:message-converters>

    </mvc:annotation-driven>

我用的是阿里的Json工具,你也可以配成别的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: