spring boot中支付宝生活号事件订阅,中文参数乱码问题解决方案

项目使用的是spring boot 2.0.0 RELEASE版本

出发点:

在支付宝生活号后台设置好支付宝默认应用网关之后,只要有关注、取关等等事件之后都会发推送过来。

看样子默认是GBK编码,得验签返回。

问题:

当接收到签名后发现中文乱码(项目默认request编码是UTF-8)

1、String biz_content = request.getParameter("biz_content");
2、String str1= new String(biz_content.getBytes("GBK"), "utf-8");
3、String str= new String(biz_content.getBytes("ISO-8859-1"), "utf-8");

使用1、2、3等方式都乱码

使用方式4:在request.getParamter之前

request.setCharacterEncoding("GBK");

还是乱码

使用方式5:在RequestMapping添加

produces ="text/plain;charset=GBK"

还是乱码

=====================================以上都乱码================================================

尝试着到支付宝论坛寻找问题,也是无果,询问了一下阿里的技术客服,也是建议整个项目设置为GBK编码,无奈只能自己来了

====================================以下为分析过程===============================================

由于spring boot只是集成mvc部分,实际上还是spring mvc,研究过springmvc部分原理机制的同学应该知道,spring mvc会使用CharacterEncodingFilter 对字符做编码,在下图代码打断点,可以发现项目默认编码是用UTF-8,并且设置了CharacterEncoding,看样子问题就在这里了

spring boot默认加载在之前的文章说过,这里不多说

通过上面的图,可以看出springmvc所有request的配置是通过 

spring.http.encoding

至此,我们发现刚才doFilterInternal可以设置的内容,一个是charset,一个force-request。于是通过设置

spring.http.encoding.charset=GBK

问题解决

通过设置(Whether to force the encoding to the configured charset on HTTP requests)

spring.http.encoding.force-request=false

问题解决

================================================================================================

在这里问题又来了,如果我们通过设置charset解决这个问题,后续可能会出现什么现象?

使用force-request解决这个问题,后续又可能会出现什么现象?

欢迎留言指点,谢谢

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值