小程序向后端请求发送参数时乱码的解决方案!废话很多,请看到最后。

本文记录了一次在前后端分离项目中,小程序向Java后台发送请求时遇到的参数乱码问题及解决过程。通过编码与解码处理,最终实现数据正常传输。

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

我最近在搞一个前后端分离的项目,昨天刚刚搭好了环境,之后在浏览器上测试是可以运行的。由于前端利用小程序的界面,后台提供服务的api之后,小程序只需要向后端发起请求,后台返回json数据串,然后小程序端解析之后提供下一步的操作。

前端用小程序来写,后台利用java 框架。现在由于项目刚刚开始,后台已经写好了一个验证服务。现在利用小程序端发起验证:

wx.request({
        url: 'http://xxxxxxxxxx', //仅为示例,并非真实的接口地址
        data: {
          studentNumber: studentId,
          studentName: studentName
        },
        header: {
          'content-type': 'application/json' // 默认值
        },
        success(res) {
          console.log(res.data)
        }
})

由于在浏览器端测试都是好的,所以就在小程序开发文档中查阅了请求服务的api,拉下文档中的demo改一改参数作为自己的请求服务代码。本想着应该是成功的,但一直都显示用户名或密码错误的提示(前提是学号和姓名都是正确的,也与数据库进行了比对),搞不清问题,然后就让把传的参数通过后台携带返回。错误结果如下:

请看data返回的结果,就是说小程序发送给后台参数时,传给后台的文本参数时乱码的。查阅了文档之后,感觉可能是header字段中的‘content-type’有点问题,修改默认的‘application/json’为‘application/x-www-form-urlencoded‘之后,问题还是没能解决。然后靠着度娘搜索了很多,也得到了许多的解决方案,一一尝试之后,可以看到问题还是没有解决。网上所给的解决方案有给‘content-type’后面加上‘charset=utf-8’或者修改tomcat的配置文件等等,而后都未果!

后来找到一种说法就是在发送文本参数时编码,然后在后台解码。这一种说法似乎点醒了我,我就搜索了小程序端的编码方式。于是乎代码就改为了:

 wx.request({
        url: 'http://xxxxxxxxx', //仅为示例,并非真实的接口地址
        data: {
          studentNumber: studentId,
          studentName: encodeURI(studentName)
        },
        header: {
          'content-type': 'application/json' // 默认值
        },
        success(res) {
          console.log(res.data)
        }
      })

然后后台需要对接收到的参数进行解码,后台解码代码为

String temp = request.getParameter("studentName");
studentName = java.net.URLDecoder.decode(temp,"UTF-8");

运行后成功解决这个问题,于是后台传回了登录成功的结果!

找了好几个小时的原因,终于把这个问题算是解决了,因此在此记录一下过程,如果你也遇到了这个问题,可以参考我的这个解决方案,如果你的问题并没有解决,可以在下方留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值