@postmapping
一、Json对象+@RequestBody接收
var val = {id: 1, name: "小明"};
$.ajax({
url: "/getJson",
dataType: "JSON",
type: "post",
contentType: 'application/json;charset=UTF-8',
data: JSON.stringify(val),
success: function (msg) {
console.log(msg)
}
})
后端获取参数:Map<String,Object>
@PostMapping("/getJson")
@ResponseBody
public Map<String,Object> getJsonVal(@RequestBody Map<String,Object> user) {
System.out.println("user = " + user.get("id"));
System.out.println("user = " + user.get("name"));
return user;
}
后端获取参数:对象
在这里插入代码片
@PostMapping("/getJson")
@ResponseBody
public User getJsonVal(@RequestBody User user) {
return user;
}
此时因为是使用@requestbody封装的,所以使用postman进行测试传参数时,需要用raw,并选择json传递参数
二、传JSON对象
var val = {"id": 1, "name": "小明"};
$.ajax({
url: "/getJson",
dataType: "JSON",
type: "post",
// contentType: 'application/json;charset=UTF-8', //不能加
data: val,
success: function (msg) {
console.log(msg)
}
})
后端获取参数: 不推荐使用,使用post发送请求时,不推荐用requestparam接受参数,要用@requestbody来封装
@PostMapping("/getJson")
@ResponseBody
public User getJsonVal(@RequestParam("id") String id,@RequestParam("name") String name) {
User user = new User();
user.setId(Integer.parseInt(id));
user.setName(name);
return user;
}
???前端传什么类型用post发送时,可以使用form-data发送参数
三、json集合+@RequestBody接收
var val = [{"id": 1, "name": "小明"},{"id": 2, "name": "小红"}];
$.ajax({
url: "/getJson",
dataType: "JSON",
type: "post",
contentType: 'application/json;charset=UTF-8', //不能加
data: JSON.stringify(val),
success: function (msg) {
console.log(msg)
}
})
后端获取参数:
@PostMapping("/getJson")
@ResponseBody
public List<User> getJsonVal(@RequestBody List<User> user) throws IOException {
for(User user2 : user){
System.out.println("user2 = " + user2);
}
return user;
}
@RequestMapping
使用@GetMapping("/course/{courseId}"):
这种方式表示你正在定义一个REST风格的API,其中{courseId}是URL的一部分,通常被称为路径变量(path variable)。
你可以通过在方法的参数中加上@PathVariable注解来获取这个路径变量。例如:
@GetMapping("/course/{courseId}")
public String getCourse(@PathVariable String courseId) {
// 使用courseId
}
使用@GetMapping("/course")
:
- 这种方式下,URL不直接包含
courseId
。相反,courseId
可以作为请求参数(query parameter)来传递。 - 你可以通过在方法的参数中加上
@RequestParam
注解来获取这个请求参数。例如: - @RequestParam可以不加,前提条件是前端传来的参数跟你这里的 参数对应
-
@GetMapping("/course") public String getCourse(@RequestParam String courseId) { // 使用courseId }
使用请求参数(Request Parameters):
当你使用@GetMapping("/course")并且URL中有多个参数时,这些参数通常作为URL的查询字符串(query string)。
例如,URL可能是这样的:/course?courseId=123&moduleId=456,你可以这样使用:
@RequestParam可以不加,前提条件是前端传来的参数跟你这里的 参数对应
@GetMapping("/course")
public String getCourse(@RequestParam String courseId, @RequestParam String moduleId) {
// 使用courseId和moduleId
}
用一个类接收多个参数
对于URL中包含多个请求参数(如 /course?courseId=123&moduleId=456),你可以使用一个Java类来接收所有这些参数。这种方法可以使代码更加整洁,尤其是当处理具有多个参数的复杂请求时。
这里是如何使用一个类来接收所有请求参数的示例:
定义一个类来表示请求参数:
首先,你需要定义一个类,其属性对应于URL中的请求参数。例如,对于参数courseId和moduleId,你可以定义如下类:
public class CourseQuery {
private String courseId;
private String moduleId;
// 标准的getter和setter方法
public String getCourseId() {
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public String getModuleId() {
return moduleId;
}
public void setModuleId(String moduleId) {
this.moduleId = moduleId;
}
// 可以添加构造函数、toString()等
}
接下来,在你的控制器方法中,你可以将这个类作为参数,并使用@ModelAttribute
注解(或者不使用任何注解,因为Spring MVC会自动将请求参数绑定到类的属性上):
@GetMapping("/course")
public String getCourse(@ModelAttribute CourseQuery query) {
// 使用query.getCourseId()和query.getModuleId()
}
@GetMapping("/course")
public String getCourse(CourseQuery query) {
// 使用query.getCourseId()和query.getModuleId()
}
@RequestParam
@RequestParam 常用来处理简单类型的绑定,其原理是通过Request.getParameter() 获取参数值的。因为使用request.getParameter()方式获取参数,所以可以处理get 方式中参数的值,也可以处理post方式中 表单中参数的值;提交方式GET、POST;注解有两个属性: value、required; value用来指定要传入值的id名称(即请求参数的key对应,也是表单属性的name的值对应),required用来指示参数是否必须绑定,默认为true即请求参数必须携带该参数,不携带将报错;
实例:
@PostMapping("/method12")
public ApiResponse method12(@RequestParam(value = "id",required = true) int id, @RequestParam(value = "name",required = false)String name){
String s = id + "" + name;
System.out.println(s);
return ApiResponse.ok().data(s);
}
总结:
@RequestParam可以用在绑定参数上。当前端使用post请求时,但是参数只有一两个,我们不想创建对象了,可以使用该注解将其绑定到控制器的参数上
@RequestParam可以不加,前提条件是前端传来的参数跟你controller这里的参数对应
前端请求传Json对象的字符串则后端使用@RequestBody(一般前端也就是传递Json对象的字符串)。
有时候在做项目的时候时常JSON对象和JSON对象字符串弄混淆,尤其是在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。