application/x-www-form-urlencoded

我们通常使用application/x-www-form-urlencoded是因为这是HTML表单的默认编码类型,服务器端(尤其是Spring MVC)通常默认解析这种格式的数据。

如果我们不设置Content-Type,那么微信小程序默认的Content-Typeapplication/json,但是我们的后端接口接收的是application/x-www-form-urlencoded格式,所以会导致参数无法正确解析,从而请求失败。

在Spring MVC中,使用@RequestParam注解来获取参数时 ,默认情况下,它从请求的查询字符串或表单数据中读取参数,这要求请求的Content-Typeapplication/x-www-form-urlencodedmultipart/form-data
如果使用application/json,则参数需要在请求体中,并且需要使用@RequestBody注解来接收。

因此,如果我们的后端接口是使用@RequestParam来接收参数,那么前端必须使用application/x-www-form-urlencoded格式来发送数据,即把参数编码成key=value&key2=value2的形式放在请求体中。

微信小程序的wx.request默认的Content-Typeapplication/json,它会将数据对象序列化成JSON字符串放在请求体中。这样,后端使用@RequestParam就无法获取到参数。

所以,我们需要显式设置Content-Typeapplication/x-www-form-urlencoded,并且将数据对象转换成这种格式的字符串。

但是,注意:微信小程序的wx.request方法,如果设置了Content-Typeapplication/x-www-form-urlencoded,那么它会自动将data对象转换成这种格式的字符串,所以我们只需要传入对象即可。

如果我们不设置,默认是application/json,那么就会发送JSON字符串,后端如果按照表单形式来解析,就会获取不到参数。

这就是为什么我们需要设置这个请求头。

但是,有时候后端接口也可能支持JSON格式,那么我们就可以不设置,使用默认的JSON格式。但根据你的接口代码,使用的是@RequestParam,所以必须使用表单格式。

另外,如果你的后端接口是使用@RequestBody来接收一个对象,那么就可以使用JSON格式,这时候就不需要设置这个请求头,或者设置为application/json

总结:前后端的参数传递方式必须匹配,否则参数无法正确传递。

根据你的接口,参数是用@RequestParam接收的,所以前端必须使用表单格式(application/x-www-form-urlencoded)传递参数。

在微信小程序中,设置这个请求头后,它会自动将data对象转换成key=value&key2=value2的格式,并设置请求体为这个字符串,同时设置Content-Typeapplication/x-www-form-urlencoded

如果不设置,那么默认就是JSON格式,后端就无法正确获取参数。

这就是为什么不加这个请求头可能会失败的原因。

注意:如果后端接口支持同时接收表单和JSON,那么可能不会失败。但根据你的代码,应该是只接收表单格式。

另外,有些后端框架可以自动处理,但Spring MVC默认不支持这种混合模式。

所以,为了确保请求成功,我们需要按照后端接口的要求设置请求头。

相关推荐
二月夜11 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java12 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
程序员二叉12 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_291412 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始12 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午13 小时前
17_synchronized关键字深度解析
java·开发语言
Xzh042314 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
艾利克斯冰15 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马15 小时前
Java新特性:record关键字
java·开发语言
折哥的程序人生 · 物流技术专研16 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘