首页 > 其他分享 >SpringBoot接收参数的几种常用方式

SpringBoot接收参数的几种常用方式

时间:2024-08-13 18:53:21浏览次数:13  
标签:SpringBoot 几种 public String 参数 请求 接收 id name

目录

1、路径变量(Path Variables)

1.1、接口定义

@RestController
@RequestMapping("/api")
public class ExampleController {

    @GetMapping("/users/{id}")
    public String getUserById(@PathVariable("id") Long id) {
        return "User ID: " + id;
    }
}

1.2 、APIPost 测试

请求 URL: http://localhost:8080/api/users/123
请求方法: GET
结果:123

1.3 、详细解释

在 Spring Boot 中,@PathVariable 注解用于提取 URL 中的路径变量。路径变量是在 URL 中占位符的位置,通常用于获取动态数据(例如资源 ID)。

解释
@PathVariable(“id”):“id” 是 URL 模板中路径变量的名称。在这个例子中,@PathVariable 注解告诉 Spring 框架,方法的 id 参数应该绑定到 URL 中的 {id} 部分。
示例

@RestController
@RequestMapping("/api")
public class ExampleController {

    @GetMapping("/users/{id}")
    public String getUserById(@PathVariable("id") Long id) {
        return "User ID: " + id;
    }
}

在这个例子中:

URL 模板:/users/{id},其中 {id} 是路径变量。
方法参数:@PathVariable(“id”) Long id,这表示方法的 id 参数将绑定到 URL 中的 {id} 部分。

1.4 、不写括号里的 id 的影响

1.4.1、 情况1

如果你不写括号里的 id,Spring Boot 会依赖于默认行为。默认情况下,@PathVariable 会使用方法参数的名字作为路径变量的名字。如果方法参数名与路径变量名匹配,代码仍然能正常工作。例如:

@GetMapping("/users/{id}")
public String getUserById(@PathVariable Long id) {
    return "User ID: " + id;
}

在这个例子中:

路径变量的名字和方法参数的名字一致。
Spring Boot 会自动将 URL 中的 {id} 绑定到方法的 id 参数。

1.4.2、 情况2

@GetMapping("/users/{userId}")
public String getUserById(@PathVariable(userId) Long id) {
    return "User ID: " + id;
}

这样也是没问题的。

1.4.3、 情况3(错误情况)

参数名不匹配:如果路径变量的名字和方法参数的名字不匹配且没有指定 @PathVariable 的名称,Spring Boot 会抛出异常,因为它无法确定如何将 URL 中的值绑定到方法参数上。
示例:

@GetMapping("/users/{userId}")
public String getUserById(@PathVariable("id") Long id) { // 这里的 "id" 和 URL 中的 "userId" 不匹配
    return "User ID: " + id;
}

在这个例子中,URL 的路径变量是 {userId},但 @PathVariable 注解使用了 “id”。这会导致 Spring Boot 报错,因为它无法找到匹配的路径变量。为了避免这种错误,应确保路径变量名称与 @PathVariable 注解中指定的名称一致,或者保持方法参数名称与路径变量名称一致。

2、请求参数(Request Parameters)

2.1、接口定义

@RestController
@RequestMapping("/api")
public class ExampleController {

    @GetMapping("/search")
    public String searchUser(@RequestParam("name") String name, @RequestParam("age") int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

2.2、APIPost 测试

请求 URL: http://localhost:8080/api/search?name=John&age=30
请求方法: GET

2.3、详细解释

@RequestParam 注解用于从 HTTP 请求中提取参数。在 Spring Boot 中,@RequestParam 注解的括号中可以包含不同的属性,这些属性控制如何解析请求中的参数。具体来说,这些属性可以有以下作用:

  • name:指定请求参数的名称。例如,@RequestParam(name = “param”)表示将请求中名为"param"的参数的值绑定到方法的参数上。

  • value:与name属性作用相同,用于指定请求参数的名称。如果没有提供 value 属性,Spring 默认使用方法参数的名称作为参数名称。对于 Spring 4.3 及以上版本,value 属性可以省略,直接写参数名即可。

  • defaultValue:指定请求参数的默认值。如果请求中未提供该参数,则使用默认值。

  • required:指定该请求参数是否为必需的。默认为true,如果 required 设置为 true,则请求中必须包含该参数,否则会返回 400 错误。如果省略或设置为 false,则该参数是可选的。

2.4、@RequestParam应用举例

2.4.1、一般用法

在你的代码中:

@RestController
@RequestMapping("/api")
public class ExampleController {

    @GetMapping("/search")
    public String searchUser(@RequestParam("name") String name, @RequestParam("age") int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

@RequestParam("name")@RequestParam("age") 指定了请求中必须包含 nameage 两个参数。value 属性指定了请求参数的名称。

2.4.2、指定参数名

在某些情况下,请求参数的名称与方法参数的名称不一致。可以通过@RequestParam注解的value属性指定请求参数的名称:

@GetMapping("/hello")
public String sayHello(@RequestParam("user") String name) {
    return "Hello, " + name + "!";
}

在这个示例中,请求参数的名称为user,而方法参数的名称为name。通过@RequestParam("user"),我们可以将请求参数user绑定到方法参数name上。

2.4.3、不写括号里的内容的后果

2.4.3.1、省略 value

如果你省略 value 属性,也就是注解不写参数名,Spring 默认使用方法参数的名称作为请求参数的名称。例如:

@GetMapping("/search")
public String searchUser(@RequestParam String name, @RequestParam int age) {
    return "Name: " + name + ", Age: " + age;
}

假如一个请求 URL: http://localhost:8080/api/search?name=John&age=30,这样是没问题的。上面的代码等同于之前的代码,只是省略了 value 属性。

2.4.3.2、省略 valuedefaultValue

如果请求中没有提供相应的参数,且没有设置 defaultValue,Spring 将抛出 MissingServletRequestParameterException 异常,表示缺少必需的请求参数。如果将 required 设置为 false,则可以省略这些参数而不会报错。

示例:URL:http://localhost:8080/api/search?name=John ,会报错400,少了个请求参数age(因为注解的required默认为true)。

3、请求体(Request Body)

3.1、接口定义

@RestController
@RequestMapping("/api")
public class ExampleController {

    @PostMapping("/users")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
    
    public static class User {
        private String name;
        private int age;

        // Getters and setters
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        public int getAge() { return age; }
        public void setAge(int age) { this.age = age; }
    }
}

3.2、APIPost 测试

请求 URL: http://localhost:8080/api/users
请求方法: POST
请求体(JSON)

{
    "name": "Alice",
    "age": 28
}

4、 表单数据(Form Data)

4.1、接口定义

@RestController
@RequestMapping("/api")
public class ExampleController {

    @PostMapping("/form")
    public String submitForm(@RequestParam("name") String name, @RequestParam("email") String email) {
        return "Name: " + name + ", Email: " + email;
    }
}

4.2、APIPost 测试

请求 URL: http://localhost:8080/api/form
请求方法: POST
请求体(表单数据):body里边的form-data
name: Alice
email: [email protected]

5、参考链接

参考链接1:SpringBoot接收参数的几种常用方式
参考链接2:关于日期相关问题感兴趣的可以看这一篇文章:https://blog.csdn.net/weixin_43888891/article/details/126846791

标签:SpringBoot,几种,public,String,参数,请求,接收,id,name
From: https://blog.csdn.net/m0_50736744/article/details/141127263

相关文章

  • 【SpringBoot+Vue】基于混合推荐算法的小说在线阅读平台
    【1】系统介绍随着互联网技术的发展和普及,网络文学已经成为人们日常生活中不可或缺的一部分。网络小说因其便捷的获取方式、丰富的题材选择以及个性化的阅读体验而受到广大读者的喜爱。然而,在海量的小说资源中,如何为每位读者提供高质量、个性化的阅读推荐,成为了在线阅读平......
  • SpringBoot项目创建报错——解决Intellij idea Error:java: 无效的源发行版: 16
    错误信息java:错误:无效的源发行版:16分析我的JDK版本为1.8,创建SpringBoot项目时只有jdk21、22,SpringBoot版本也只有3.x.x,而jdk8仅兼容2.x.x,由此造成了不兼容解决先把所有jdk版本统统改成一样的先打开ProjectStructure再打开Setting还需要改下pom.xml文件的jdk版......
  • Springboot计算机毕业设计基于OBE理念的课程管理系统jg2u7
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表教师,课程目标,课程大纲,知识点,实验项目,考核信息开题报告内容一、研究背景与意义随着信息技术的快速发展和教育信息化的不断推进,高校课程管理系统的建设变得......
  • Springboot计算机毕业设计基金交易平台+程序+源码+数据库
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,产品分类,基金产品,基金购买,账户余额,基金赎回,基金网站,提现信息开题报告内容一、研究背景与意义研究背景随着金融市场的发展和投资者对理财需求的不断......
  • Springboot计算机毕业设计机房管理系统(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表教师,课表信息,课程信息,机房信息,设备信息,设备使用开题报告内容一、研究背景随着信息技术的迅速发展,计算机和网络已经成为现代社会不可或缺的一部分。在教育......
  • Springboot计算机毕业设计婚庆系统d33l3
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表新闻动态,成功事例,婚庆喜讯,会员,商品信息,服务项目,商品订单,服务预约开题报告内容一、研究背景随着社会经济的飞速发展和人们生活水平的不断提升,婚礼已逐渐......
  • Springboot计算机毕业设计基于SpringpBoot的校园帮互助平台管理系统40n1a
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表发布者,接受者,任务信息,任务等级,接单信息,提现信息开题报告内容一、选题背景与意义1.选题背景随着社会的快速发展和科技的进步,校园生活日益呈现出多元化和......
  • Springboot计算机毕业设计基于+Vue的自媒体系统+程序+源码+数据库
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,广告分类,广告展示,广告投放,商家开题报告内容一、研究背景与意义随着互联网技术的飞速发展,自媒体已成为信息传播的重要渠道之一。自媒体平台不仅为用户提......
  • Springboot计算机毕业设计火烈鸟兽医院信息管理gb7ej
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,兽医,宠物信息,挂号预约,宠物药品,药品种类,宠物病例,药品开具,宠物住院,医院吐槽开题报告内容一、研究背景与意义研究背景随着人们生活水平的提高和宠物......
  • vue父子组件传值有几种方式?
    在Vue.js中,组件间通信是构建复杂应用的关键。子组件与父组件之间的通信以及父组件向子组件传递数据都有多种方式。下面是常见的几种方法:父组件向子组件传递数据Props描述:这是最常见的方法,通过定义props,父组件可以将数据直接传递给子组件。推荐度:强烈推荐,这是最符合Vue单......