SpringMVC关于@RequestBody加与不加的区别
SpringMVC关于@RequestBody加与不加的区别
前两天在做项目的时候遇到了这样一个问题,小组成员为了方便做接口测试,给Controller
控制器上加了@RequestBody
注解,但是前端请求接口时报错:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
为此记录一下关于@RequestBody
的相关知识。
先说结论:
使用@RequestBody
,用于处理JSON
格式的数据,请求的Content-Type
的类型为:application/json
,请求参数类型为json
字符串,格式为 { "id": 1, "name": "knqiufan" }
;
不使用@RequestBody
,处理表单格式的数据,请求的Content-Type
类型为:application/x-www-form-urlencoded
或multipart/form-data
,提交的数据格式为 id=1&name=knqiufan
。
所以开头说的前端请求接口报错就是因为前后端的请求参数格式不一致导致的报错。
以下用代码做一些测试。
后台接口:
@GetMapping("test1")
@ApiOperation("测试1")
public ActionResult<Object> test1(@RequestBody SignInModel signInModel) {
return ActionResult.success(signInModel);
}
@GetMapping("test2")
@ApiOperation("测试2")
public ActionResult<Object> test2(SignInModel signInModel) {
return ActionResult.success(signInModel);
}
前端请求(使用的是uniapp
的请求方式,默认情况下Content-Type
为application/x-www-form-urlencoded
:
// 使用表单格式传递
uni.request({
url: "http://127.0.0.1:9000/api/hyHd/ww/app/xcgj/test2",
method: "get",
data: {
ycyy: "cccccc",
bzmGgJcrw: "928j8d782j3",
bzmGgJcrwDy: "kckiwjkngoo"
},
success(res) {
console.log("res", res)
},
fail(e) {
console.error("e", e)
}
})
// 使用json格式传递
uni.request({
url: "http://127.0.0.1:9000/api/hyHd/ww/app/xcgj/test2",
method: "get",
header: {
'Content-Type': 'application/json'
},
data: JSON.stringify({
ycyy: "cccccc",
bzmGgJcrw: "928j8d782j3",
bzmGgJcrwDy: "kckiwjkngoo"
}),
success(res) {
console.log("res", res)
},
fail(e) {
console.error("e", e)
}
})
关于Content-Type
的一些知识
Content-Type
为application/x-www-form-urlencoded
时提交的数据方式是 a=1&b=2
这样
Content-Type
为application/json
时需要以json
字符串形式提交:{"a":1, "b":2}
写的稍微有点乱,先为自己记录使用。
本文来自博客园,作者:knqiufan,转载请注明原文链接:https://www.cnblogs.com/knqiufan/p/17720031.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本