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}

写的稍微有点乱,先为自己记录使用。

SpringMVC关于@RequestBody加与不加的区别的更多相关文章

  1. 【SpringBoot—注解】@requestBody 与@requestparam;@requestBody的加与不加的区别

    一)首先说明xia @requestBody与@requestParam的区别 spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头.都是用来获取请求路径 ...

  2. href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)

    在写href链接时,有绝对路径与相对路径,href 里面 链接前面加/与不加的区别? href="/cp/images/lis.jpg" 相对路径 cp前面/会获取当前路径,组合成 ...

  3. 网站开发进阶(四十三)html中,路径前加“/” 与不加“/”的区别

    网站开发进阶(四十三)html中,路径前加"/" 与不加"/"的区别 前言 <script src="js/downloadify.js&quo ...

  4. @RequestParam详解以及加与不加的区别

    以前写controller层的时候都是默认带上 @RequestParam 的, 今天发现不加@RequestParam 也能接收到参数 下面我们来区分一下加与不加的区别 这里有两种写法 @Reque ...

  5. @RequestParam加与不加的区别

    最简单的两种写法,加或不加@RequestParam注解 @RequestMapping("/list") public String test(int userId) { ret ...

  6. 路径前面加与不加"/"的区别

    加"/"是绝对路径, 不加"/"是相对路径.假设你的这个html文件的路径是www.example.com/path/to/html/a.html,那么src= ...

  7. js调用函数时括号加与不加的区别,function()&function

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 链接后加"/"与不加"/"的区别

    1.http://www.abc.com/abc2.http://www.abc.com/abc/ 当Web服务器接收到对某个末尾不含斜杠的url请求时,例如“http://www.abc.com/a ...

  9. rediret 加/与不加/的区别

  10. mybatis @SelectKey加于不加的区别

    正常情况下,我们设置表的主键自增,然后: @Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{u ...

随机推荐

  1. sipp3.6带媒体测试方案

    概述 SIP压测工具sipp,免费,开源,功能足够强大,配置灵活,优点多. 本文档介绍sipp工具如何带媒体测试,并介绍如何制作可用的媒体文件(G729和PCMA). 环境 centos7.9 fre ...

  2. 大数相加 a+b

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #i ...

  3. 每天学五分钟 Liunx 000 | 计算机与 Liunx

      计算机 计算机是具有数据处理与逻辑运算的机器. 它有输入单元,输出单元,CPU 内部的控制单元,逻辑处理单元以及内存组成.   输入单元如鼠标键盘等输入设备:   输出单元如打印机,显示屏,等输出 ...

  4. MySQL 及调优

    存储引擎的种类 MySQL 中存在多种存储引擎,比如: InnoDB 支持事务: 支持外键: 同时支持行锁和表锁. 适用场景:经常更新的表,存在并发读写或者有事务处理的业务场景. MyISAM 支持表 ...

  5. 基于AHB_BUS Clac slave详解

    基于AHB-APB BUS slave详解 1.目录 高内聚:让模块的功能更集中,更单一. AMBA总线例子,需要有一个模块和AMBA进行交互,就可以单独将与AHB总线进行交互的部分作为一个模块.经常 ...

  6. css - 隐藏body滚动条

    body::-webkit-scrollbar{ display: none; }

  7. vocode-markdown导出pdf插件

    1. 背景 在vocode中编辑markdown格式文本文件,并将其导出为pdf格式文件 2. 插件 在 vscode的扩展市场中搜索插件"Markdown PDF" 并安装 选中 ...

  8. Git-分支-branch-checkout-merge

  9. Nginx的日志处理

    Nginx的日志处理 背景 之前一直被各种咨询nginx的使用问题. 大部分都是性能, 加模块, 以及一些tcp端口等的问题. 其实这些都还好, 还有一个比较麻烦的问题时日志相关的. nginx的日志 ...

  10. [转帖]PolarDB和Oceanbase的区别和联系

    PolarDB-X 和 OceanBase 都是阿里云提供的分布式关系型数据库产品,它们都具有高可用.高性能.分布式等特点.但是两者也存在一些差异. 数据库理论基础不同 PolarDB-X 基于传统的 ...