RequestBody 和 RequestParam的区别
@RequestBody , 需要使用 传入 json格式,
专门为了
application/json
和application/xml
等设置的
-
会自动装配到 实体类中
-
代码
@RequestMapping(value="test3",method = RequestMethod.POST) public void test3(@RequestBody UserDto userDto){ // from-data 报错 415 // x-www-form-uriencodéd 报错 415 // json 报错 400 System.out.println(userDto); }
**package com.example.hello_reqquestparam.common.dto; public class UserDto { private String name; private String password; private int age; public int getAge() { return age; } @Override public String toString() { return "UserDto{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; } public void setAge(int age) { this.age = age; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } }**
-
-
一般用于 post 请求
@RequestParam 与 "不写默认"
相同
-
都是从 requestParam 作用域中 获取
-
获取 除了
application/json
和application/xml
等 方式 提交的内容form-data x-www-form-urlencoded -
GET POST 都可以获取
-
都可以用作文件传输,且 必须以 from-data 方式提交, 可用于文件上传
不同:
-
会不会自动装载 实体类 ?
不写默认 是可以 装载到 实体类中的,
@ReqquestParam 无法装载到 实体类
-
@ReqquestParam 只支持 简单类型: String、 Ingeger 、Map (只能用于 某一个字段上)
public void test22(@RequestParam HashMap<String,String> hashMap)
-
作用不同
不写时 ,默认 改参数时可以不传递的
@RequestParam, 一般用于 规定 名字、必选、默认值等 属性
-
原理:
发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。
即参数会以Form Data的形式进行传递,不会显式出现在请求url中。
请求参数将被放置于request.paramter,解析成map。
在控制台看到,数据就是在Form Data中。
form表单中数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式为application/x-www-form-urlencoded)。
所以
url
、Query String Parameters
、Form Data
里的参数都可以通过@RequestParam
或者request.getParameter(" ")
获取。
(33条消息) @requestbody和@requestparam到底什么作用_Archie_java的博客-CSDN博客_什么情况下需要@requestparam(33条消息)