/*
* 非json格式
* 第1种方式:如果有数据从前端过来,后端直接把这些数据都当成(看作是)字符串。
* 如:
* String username:如果你前端传输过来的用户名,后端直接看成字符串来接收。
* String password:如果你前端传输过来的密码,后端直接看成字符串来接收。
*/
@RequestMapping("add1")
public String add1(String username,String password){
System.out.println("username = "+username);
System.out.println("password = "+ password);
return "success";
}
/*
* 非json格式
* 第2种方式:把前端传输过来的参数,后端封装成一个实体类。
* 如:
* 把前端传输过来的参数,(后端)封装到User user实体类中。
*/
@RequestMapping("add2")
public String add2(User user){
System.out.println(user);
return "success";
}
支持get请求,同上
支持post请求,同上
方式3:restful风格的请求与数据提交 —— 需要使用{变量名称}语法来声明RestFul的参数列表,通过一个注解@PathVariable指定参数的映射规则。
以前:localhost:8080/users/add1?username=tom&password=123&&&
缺点:因为get请求所提交的数据是有限制的,所以这里key=value的数据提交方式中"key="占用了很多空间,导致了可以传输的数据量的减少。如果可以把"key="给删除掉,那么前端就可以多提交几个参数给后端了。
restful风格:localhost:8080/users/add1?tom/123//
案例:后端接收方式
/*
* 非json格式
* 第3种方式:restful风格:get请求:localhost:8080/users/add3?tom/123456
* 注意:
* (1)@RequestMapping支持变量占位符的写法。如:@RequestMapping("add3/{username}/{password}"),其中的{username}和{password}是变量占位符,而其中的username和password是变量名称。
* (2)@RequestMapping只是成功接收到前端传输的数据,我们是还是把数据放到方法的参数列表中。
* (3)使用@PathVariable注解,可以指定请求路径中的哪个变量(@RequestMapping接收的参数)与add3参数列表中的哪个参数对应起来。
* 1)如果@RequestMapping的变量名称和add3参数列表中的参数名称一致,只需要加@PathVariable即可,它会自动注入。
* 2)如果名称不一致,@RequestMapping("add3/{name}/{password}") 》 add3(@PathVariable("name") String username, @PathVariable String password)
*/
@RequestMapping("add3/{name}/{password}")
public String add3(@PathVariable("name") String username, @PathVariable String password){
System.out.println(username+" / "+password);
return "success";
}
方式4:借助HttpServletRequest对象来接收
/*
* 非json格式
* 第4种方式:借助HttpServletRequest对象来接收
* 无论前端提交的数据是简单类型的还是复杂类型的,都会整体被打包放在HttpServletRequest对象中传输到后端了。
* 注:
* (1)通过HttpServletRequest对象中的数据是以key- value的键值对的形式存储的。比如,key就是前端的参数名称username=tom - (key就是username)
* (2)通过HttpServletRequest,不光可以获取到前端提交的数据,还可以获取到关于前端的其它信息,如http协议版本、请求url、提交的数据的类型等
*/
@RequestMapping("add4")
public String add4(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"//"+password);
return "success";
}
json格式的数据
概述
方式5:后端会将前端传递过来的json数据直接封装到pojo对象中:
/*
* json格式
* 第1种:后端会将前端传递过来的json数据直接封装到pojo对象中。
* 注意:
* (1)这种方式在前端提交数据的时候,不能够在postman Body和postman Query中使用key=value的方式进行提交,而是通过json来提交
*/
@RequestMapping("add5")
public User add5(@RequestBody User user){
System.out.println(user.toString());
return user;
}
方式6:引用类型。实体类对象中有除了有基本数据类型外,还有复杂数据类型的出现,如引用类型。如果一个实体类中定义有引用数据类型,在传递数据的时候,使用{}的形式来进行提交。后端会使用一个注解@RequestBody注解来进行标记。
方式7:List集合,在实体类中出现
方式8:Map
方法:
/*
* json格式
* 第4种:Map
* 因为在java看来json本质意义上就是一种map结构的内容。
* 如:key分别会是"username"和"password"
* {
* "username":"tom",
* "password":"123456"
* }
*/
@RequestMapping("add8")
public String add8(@RequestBody Map map){
System.out.println(map.get("username"));
System.out.println(map.get("password"));
return "success";
}
package com.pojo;
import java.util.List;
public class User {
private String username;
private String password;
private Cat cat;
private List courseList;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", cat=" + cat +
", courseList=" + courseList +
'}';
}
}
package com.controller;
import com.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@RequestMapping("users")
@RestController
public class UserController {
/*
* 非json格式
* 第1种方式:如果有数据从前端过来,后端直接把这些数据都当成(看作是)字符串。
* 如:
* String username:如果你前端传输过来的用户名,后端直接看成字符串来接收。
* String password:如果你前端传输过来的密码,后端直接看成字符串来接收。
*/
@RequestMapping("add1")
public String add1(String username,String password){
System.out.println("username = "+username);
System.out.println("password = "+ password);
return "success";
}
/*
* 非json格式
* 第2种方式:把前端传输过来的参数,后端封装成一个实体类。
* 如:
* 把前端传输过来的参数,(后端)封装到User user实体类中。
*/
@RequestMapping("add2")
public String add2(User user){
System.out.println(user);
return "success";
}
/*
* 非json格式
* 第3种方式:restful风格:get请求:localhost:8080/users/add3?tom/123456
* 注意:
* (1)@RequestMapping支持变量占位符的写法。如:@RequestMapping("add3/{username}/{password}"),其中的{username}和{password}是变量占位符,而其中的username和password是变量名称。
* (2)@RequestMapping只是成功接收到前端传输的数据,我们是还是把数据放到方法的参数列表中。
* (3)使用@PathVariable注解,可以指定请求路径中的哪个变量(@RequestMapping接收的参数)与add3参数列表中的哪个参数对应起来。
* 1)如果@RequestMapping的变量名称和add3参数列表中的参数名称一致,只需要加@PathVariable即可,它会自动注入。
* 2)如果名称不一致,@RequestMapping("add3/{name}/{password}") 》 add3(@PathVariable("name") String username, @PathVariable String password)
*/
@RequestMapping("add3/{name}/{password}")
public String add3(@PathVariable("name") String username, @PathVariable String password){
System.out.println(username+" / "+password);
return "success";
}
/*
* 非json格式
* 第4种方式:借助HttpServletRequest对象来接收
* 无论前端提交的数据是简单类型的还是复杂类型的,都会整体被打包放在HttpServletRequest对象中传输到后端了。
* 注:
* (1)通过HttpServletRequest对象中的数据是以key- value的键值对的形式存储的。比如,key就是前端的参数名称username=tom - (key就是username)
* (2)通过HttpServletRequest,不光可以获取到前端提交的数据,还可以获取到关于前端的其它信息,如http协议版本、请求url、提交的数据的类型等
*/
@RequestMapping("add4")
public String add4(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"//"+password);
return "success";
}
/*
* json格式
* 第1种:后端会将前端传递过来的json数据直接封装到pojo对象中。
* 注意:
* (1)这种方式在前端提交数据的时候,不能够在postman Body和postman Query中使用key=value的方式进行提交,而是通过json来提交
*/
@RequestMapping("add5")
public User add5(@RequestBody User user){
System.out.println(user.toString());
return user;
}
/*
* json格式
* 第2种:实体类对象中有除了有基本数据类型外,还有复杂数据类型的出现
*/
@RequestMapping("add6")
public User add6(@RequestBody User user){
System.out.println(user.toString());
return user;
}
/*
* json格式
* 第3种:实体类对象中有List集合
*/
@RequestMapping("add7")
public User add7(@RequestBody User user){
System.out.println(user.toString());
return user;
}
/*
* json格式
* 第4种:Map
* 因为在java看来json本质意义上就是一种map结构的内容。
* 如:key分别会是"username"和"password"
* {
* "username":"tom",
* "password":"123456"
* }
*/
@RequestMapping("add8")
public String add8(@RequestBody Map map){
System.out.println(map.get("username"));
System.out.println(map.get("password"));
return "success";
}
}
参考
【Spring Boot接收前端数据】Spring Boot接收从前端传过来的数据常用8种方式,带你轻松搞定前后端数据联调、
一、基于@PathVariable注解
二、基于@RequestParam注解
三、基于@PathVariable+@RequestParam混合
四、基于@RequestBody注解
五、基于HttpServletRequest请求
六、不基于任何注解进行表单传参