小程序端代码
wx.request({
url: 'xxxx'
data: {
studentId: e.detail.value.no,
password: e.detail.value.pwd
},
method:'POST',
header: {
'content-type': 'application/json' // 默认值
},
...
...
controller的代码
@PostMapping("xxxx")
@ResponseBody
public JsonResult Login(@RequestParam studentId,@RequestParam password) {
...
...
}
小程序发出请求,但是后台拿不到…查了一下发现
GET、POST方式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理)
所以有两个解决方式
- 将小程序端的 ‘content-type’ 改为’application/x-www-form-urlencoded’,即
wx.request({
url: 'xxxx'
data: {
studentId: e.detail.value.no,
password: e.detail.value.pwd
},
method:'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
- 或者是 Controller 用@RequestBody 接受参数,小程序还是’content-type’: 'application/json’不变,即
public JsonResult Login(@RequestBody Map<String, String> req) {
String studentId = req.get("studentId");
String password = req.get("password");
...
...
}