springboot使用@postmapping、@RequestMapping捕获并封准成参数的几种方式。

@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格式的字符串,一定是一个字符串。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值