param
和 body
中的 formdata
在 HTTP 请求中有着不同的作用和传输方式。
-
param
:param
是指请求的参数,也称为查询参数或路径参数。它们通常出现在 URL 中的问号后面(例如?key1=value1&key2=value2
),或者在 RESTful API 的路径中作为路径参数(例如/users/{id}
)。这些参数是通过 URL 进行传输的,可以直接被服务器端解析和获取。在 Spring MVC 或类似的框架中,可以使用@RequestParam
注解将查询参数绑定到方法的参数上。 -
body
:body
是指请求体,它是 HTTP 请求中的一部分,用于传输请求的主体数据。请求体通常用于传递复杂的结构化数据,例如 JSON、XML 或二进制数据。在请求体中,数据可以使用不同的编码方式进行传输,如formdata
、x-www-form-urlencoded
、JSON 等。在 Spring MVC 或类似的框架中,可以使用@RequestBody
注解将请求体数据绑定到方法的参数上。 -
formdata
:formdata
是一种多部分表单数据编码方式,适用于上传文件或包含二进制数据的表单提交。它将每个字段和其对应的值组合成一个独立的部分(part),每个部分都有自己的 Content-Type,并且可以包含二进制数据。这种编码方式常用于文件上传和包含大量文本或二进制数据的表单提交。
总结来说,param
是指请求的查询参数或路径参数,通过 URL 进行传输,而 body
是请求的主体数据,用于传输结构化的数据。formdata
是一种编码方式,适用于表单提交,特别是包含文件上传或二进制数据的情况。
如果在方法参数上不添加 @RequestParam 或 @RequestBody 注解,那么默认情况下,Spring MVC 或类似的框架将会根据以下规则来解析请求参数:
对于 GET 请求,方法参数名称会与请求的查询参数进行匹配。例如,如果请求的 URL 是 /example?paramName=value,那么方法参数中的名称为 paramName 的参数会自动与查询参数进行匹配,并将其值绑定到方法参数上。
对于 POST 请求,框架默认将请求体解析为 application/x-www-form-urlencoded 编码格式。在这种情况下,方法参数名称会与请求体中的表单字段进行匹配。例如,如果请求体中包含字段 paramName=value,那么方法参数中的名称为 paramName 的参数会与该字段进行匹配,并将其值绑定到方法参数上。
在Spring框架中,@RequestParam和GET方法以及@RequestBody和POST方法是常用的组合,但并不是一定要配对使用的。
1、@PathVariable 拼接到url上
@PathVariable(“buyDemandId”) Long buyDemandId
@PathVariable主要作用:映射URL绑定的占位符
2、get 传对象
3、get 传字符串
但是如果不加@RequestParam的话,用body中的formdata也可以测试成功
是因为,当你使用body中的formdata进行测试时,如果在请求的URL中包含了查询参数,Spring框架仍然可以通过@RequestParam注解从URL中提取参数值,并将其绑定到方法参数上。这是因为@RequestParam注解的作用是从请求的URL中获取参数值,而不仅仅限于特定的请求方式或请求体类型。
因此,无论你使用body中的formdata还是使用URL中的查询参数,只要参数名匹配,并且请求到达了/example路径,Spring框架都能正确地提取参数值并将其传递给方法。
4、post 传字段
a、加@RequestBody,常用
在请求体中,数据可以使用不同的编码方式进行传输,如 formdata
、x-www-form-urlencoded
、JSON 等。所以上边的这种不可以用formdata
b、但是如果不加@RequestBody,对于 POST 请求,框架默认将请求体解析为 application/x-www-form-urlencoded 编码格式。在这种情况下,方法参数名称会与请求体中的表单字段进行匹配。例如,如果请求体中包含字段 paramName=value,那么方法参数中的名称为 paramName 的参数会与该字段进行匹配,并将其值绑定到方法参数上。
c、post也是可以用RequestParam传,但是不常用,不建议用
当你在使用@PostMapping标注的方法上使用@RequestParam注解时,它将尝试从请求的URL中获取指定的参数值,并将其绑定到方法参数上。这与@GetMapping的行为相同。
关于测试时使用body中的formdata和Params都可以成功的问题,可能是因为浏览器或测试工具的行为。在常规的HTTP请求中,@RequestParam通常用于从URL中获取查询参数,而不是从请求体中获取参数。但是,一些浏览器或测试工具可能会将formdata或Params中的参数同时包括在URL和请求体中,这样@RequestParam就能从URL中获取参数值。
虽然这种行为可能会在某些情况下工作,但不建议依赖这种行为。根据HTTP协议的规范,@RequestParam应该用于从URL中获取查询参数,而@RequestBody应该用于从请求体中获取参数值。
因此,为了遵循最佳实践和提高代码的可读性,建议在使用@RequestParam时将参数放在URL中,而将在请求体中传递复杂或大量数据时使用@RequestBody注解。
5、post 传文件
6、post 传数组
7、post 请求体 传字段
8、post 请求体 传对象
map?
后端如果需要用的字段比较少的话,就不用去创建一个实体了,直接可以用map去接收。map接收过来的字符串也是KV形式的,就是json形式。