【JavaEE】SpringMVC 请求传参_mvc如何通过request传参,前端如何调用
目录
- 一、请求
- 二、传递单个参数
- 三、传递多个参数
- 四、传递对象
- 五、@RequestParam注解 后端参数重命名(后端参数映射)
- 六、传递数组
- 七、传递集合,@RequestParam
- 八、传递JSON数据
-
- 8.1 JSON字符串和Java对象互转
-
- 8.1.1 @Test注解
- 8.1.2 Java对象转JSON
- 8.1.3 JSON转Java对象
- 8.2 传递JSON
-
- 8.3 后端实现
一、请求
访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收.
传递参数, 咱们主要是使⽤浏览器和Postman来模拟.
二、传递单个参数
接收单个参数, 在 Spring MVC 中直接⽤⽅法中的参数就可以
@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m1\") public String m1(String request) { return request; }}
使用浏览器访问:http://127.0.0.1:8080/user/m1?request=hello
使用Postman:
这两种都是键值对模型,其中的键要与方法的参数名一样。
注意事项:
- 使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误, 类型不匹配时, 会报400错误.
三、传递多个参数
和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.
@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m3\") public String m3(String s1, int a) { return s1+\"参数:\"+a; }}
使用浏览器访问:http://127.0.0.1:8080/user/m3?s1=你好&a=100
使用Postman:
注意事项:
- 这两种都是键值对模型,其中的键要与方法的参数名一样。
- 参数的位置是不影响后端获取参数的结果.
- 基本类型来接收参数时,一样有上述问题。
四、传递对象
如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明. 我们不妨把这些参数封装为⼀个对象.
实例:
public class Person { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return \"Person{\" + \"id=\" + id + \", name=\'\" + name + \'\\\'\' + \", password=\'\" + password + \'\\\'\' + \'}\'; }}@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m4\") public String m4(Person person){ return person.toString(); }}
注意事项:
- 要传类中的成员名,不包含类对象名。
- 由于类定义会给成员默认值,这里没有基本类型不传值报错问题。
五、@RequestParam注解 后端参数重命名(后端参数映射)
某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致。
使用@RequestParam
注解
实例:
@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m5\") public String m5(@RequestParam(value = \"s\")String string) { return string; }}
注意事项:
- 使⽤
@RequestParam
进⾏参数重命名时, 请求参数只能和@RequestParam
声明的名称⼀
致, 才能进⾏参数绑定和赋值. - 使⽤
@RequestParam
进⾏参数重命名时, 参数就变成了必传参数. - 要将参数变成非必传参数,需要将required = false
六、传递数组
Spring MVC 可以⾃动绑定数组参数的赋值
实例:
@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m6\") public String m6(String[] strings) { return Arrays.toString(strings); }}
注意事项:
- 使用Postman传参的时候,每个数组值通过逗号隔开。
- 当需要传逗号作为值的时候,就需要传解码encode后的值。
- 在使用浏览器URL访问时,也需要将非英文字母,全部encode。
七、传递集合,@RequestParam
集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam
绑定参数关系
实例:
@RestController@RequestMapping(value = \"/user\")public class UserController { @RequestMapping(value = \"/m7\") public String m7(@RequestParam ArrayList<String> strings) { return strings.toString(); }}
注意事项:
- 与传递数组同
八、传递JSON数据
JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
JOSN语法:
- 数据在 键值对(Key-Value) 中
- 数据由逗号, 分隔
- 对象⽤ { } 表⽰
- 数组⽤ [ ] 表⽰
- 值可以为对象, 也可以为数组, 数组中可以包含多个对象
- 键key和值value之间通过冒号分割
- 键值对之间使用逗号分割
JSON优点
- 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
- 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
传输- 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
速度- 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
- 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼
的安全性
8.1 JSON字符串和Java对象互转
我们在这介绍使用Jackson方式转换,因为这个是Spring中集成了的,不用引入依赖。
还有fastjson,gson。
8.1.1 @Test注解
在我们写测试代码时我们在test这个包下面写。
我们可以直接写main方法,也可以使用@Test这个方法注解在测试方法前面加上,这个注解作用相当于为方法开一个线程。所以可以写多个被@Test修饰的方法同时运行。
8.1.2 Java对象转JSON
使用类ObjectMapper下面的writeValueAsString方法。类对象必须要有无参构造函数。
步骤:
- 创建ObjectMapper对象
- 创建对象
- 直接调用writeValueAsString 将对象转换为JSON
@Testvoid testObjectToJson() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); //创建对象 Person person = new Person(); person.setId(1); person.setName(\"zhangsan\"); person.setPassword(\"111\"); //对象转JSON String j = objectMapper.writeValueAsString(person); System.out.println(j); }
8.1.3 JSON转Java对象
使用类ObjectMapper下面的readValue方法。
- 创建ObjectMapper对象
- 创建json
- 直接调用readValue将json转换为对象
@Test void testJsonToObject() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); //创建json String s = \"{\\\"id\\\":1,\\\"name\\\":\\\"zhangsan\\\",\\\"password\\\":\\\"111\\\"}\";//JSON转对象 Person person = objectMapper.readValue(s,Person.class); System.out.println(person); }
8.2 传递JSON
8.3 后端实现
我们只需要在方法参数上加上@RequestBody这个注解。
RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中
@RequestMapping(value =\"/j1\") public String j1(@RequestBody Person person) { return person.toString(); }
postman传参