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

本文详细介绍了在使用GET和POST请求时如何正确处理中文参数和特殊符号的问题,并提供了具体的解决方案,包括配置Tomcat和Spring框架的相关参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天做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工具,你也可以配成别的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值