详解SpringBoot中5种类型参数传递和json数据传参的操作

 更新时间:2023年12月11日 09:03:04   作者:在下小吉.  
当涉及到参数传递时,Spring Boot遵循HTTP协议,并支持多种参数传递方式,这些参数传递方式可以根据请求的不同部分进行分类,

当涉及到参数传递时,Spring Boot遵循HTTP协议,并支持多种参数传递方式。这些参数传递方式可以根据请求的不同部分进行分类。

  • 路径参数(Path Parameters):
  • 路径参数是指在URL路径中的一部分,用于标识资源或指定操作。路径参数通常以{}的形式出现在URL中,如/users/{id},其中id就是一个路径参数。路径参数可以在URL中动态地改变,从而实现对不同资源的操作。使用路径参数时,Spring Boot使用@PathVariable注解将路径参数绑定到方法参数上。
  • 查询参数(Query Parameters):
  • 查询参数通常作为URL的一部分,以?开始,以key=value的形式出现,多个参数之间使用&连接,如/users?id=1&name=John。查询参数主要用于筛选或过滤资源。在Spring Boot中,可以使用@RequestParam注解将查询参数绑定到方法参数上。请求体参数(Request Body Parameters):
  • 请求体参数是通过HTTP请求体中发送的数据,通常用于传递复杂结构的数据,如JSON、XML等。请求体参数可以包含多个字段,并且可以表示更为复杂的数据模型。在Spring Boot中,可以使用@RequestBody注解将请求体参数绑定到方法参数上。
  • 表单参数(Form Parameters):
  • 表单参数通常使用HTML表单提交的数据,可以通过application/x-www-form-urlencoded或multipart/form-data格式传输。表单参数与查询参数类似,但是通常用于提交数据而不是进行筛选。在Spring Boot中,可以使用@RequestParam注解将表单参数绑定到方法参数上。
  • 请求头参数(Request Header Parameters):
  • 请求头参数包含在HTTP请求的头部信息中,可以用于传递附加的元数据,如鉴权信息、用户代理等。在Spring Boot中,可以使用@RequestHeader注解将请求头参数绑定到方法参数上。

使用理论进行讲解时,我们可以了解这些参数传递方式的原理和用途。根据HTTP协议的规范和Spring Boot的设计,开发人员可以选择合适的参数传递方式来满足业务需求。这些参数传递方式在RESTful API开发中非常常见,可以用于处理各种场景下的数据传输。

普通参数

我们在UserController类中写入这一段代码

 @RequestMapping("/commonParamDifferentname")
    @ResponseBody
    public String commonParamDifferentName(@RequestParam("name") String userName,int age){
        System.out.println("普通参数传递 userName ==> "+userName);
        System.out.println("普通参数传递 age ==> "+age);
        return "{'module':'common param different name'}";
    }

在这里插入图片描述

接收成功

在这里插入图片描述

POJO参数

我们在User类中写入这一段代码

package com.example.domain;

public class User {
    private String name;
    private int age;

    private Address address;


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    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;
    }
}

我们在UserController类中写入这一段代码

//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user){
        System.out.println("pojo参数传递 user ==> "+user);
        return "{'module':'pojo param'}";
    }

在这里插入图片描述

运行成功

在这里插入图片描述

嵌套pojo参数

适用于下面这种,可以反复写

在这里插入图片描述

我们在Address类中写入这一段代码

package com.example.domain;
public class Address {
    private String province;
    private String city;

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

在UserController里面写入这一段代码

  @RequestMapping("/pojoContainPojoParam")
    @ResponseBody
    public String pojoContainPojoParam(User user){
        System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
        return "{'module':'pojo contain pojo param'}";
    }

继续测试

在这里插入图片描述

运行成功

在这里插入图片描述

数组参数

@RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
        System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
        return "{'module':'array param'}";
    }

在这里插入图片描述

在这里插入图片描述

运行成功

在这里插入图片描述

集合参数

@RequestMapping("/listParam")
    @ResponseBody
    public String listParam(@RequestParam List<String> likes){
        System.out.println("集合参数传递 likes ==> "+ likes);
        return "{'module':'list param'}";
    }

在这里插入图片描述

在这里插入图片描述

运行成功

在这里插入图片描述

json数据传参

我们在SpringMvcConfig里面加入这一段代码@EnableWebMvc,开启json数据自动转换

在这里插入图片描述

json格式

我们找到上面 集合参数 的代码,把@RequestParam修改为@RequestBody

   @RequestMapping("/listParamForJson")
    @ResponseBody
    public String listParamForJson(@RequestBody List<String> likes){
        System.out.println("list common(json)参数传递 list ==> "+likes);
        return "{'module':'list common for json param'}";
    }

在这里插入图片描述

这里选择json,在下面写入数据

在这里插入图片描述

发现可以运行成功

在这里插入图片描述

嵌套json格式

@RequestMapping("/pojoParamForJson")
    @ResponseBody
    public String pojoParamForJson(@RequestBody User user){
        System.out.println("pojo(json)参数传递 user ==> "+user);
        return "{'module':'pojo for json param'}";
    }

在这里插入图片描述

运行成功

在这里插入图片描述

集合格式

@RequestMapping("/listPojoParamForJson")
    @ResponseBody
    public String listPojoParamForJson(@RequestBody List<User> list){
        System.out.println("list pojo(json)参数传递 list ==> "+list);
        return "{'module':'list pojo for json param'}";
    }

如果报错,重启一下就好了

在这里插入图片描述

在这里插入图片描述

运行成功

在这里插入图片描述

以上就是详解SpringBoot中5种类型参数传递和json数据传参的操作的详细内容,更多关于SpringBoot类型传参和json传参的资料请关注脚本之家其它相关文章!

相关文章

  • Java Apollo是如何实现配置更新的

    Java Apollo是如何实现配置更新的

    这篇文章主要介绍了Java Apollo是如何实现配置更新的,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • SpringBoot Shiro配置自定义密码加密器代码实例

    SpringBoot Shiro配置自定义密码加密器代码实例

    这篇文章主要介绍了SpringBoot Shiro配置自定义密码加密器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java I/O深入学习之File和RandomAccessFile

    Java I/O深入学习之File和RandomAccessFile

    这篇文章主要介绍了Java I/O深入学习之File和RandomAccessFile, I/O系统即输入/输出系统,对于一门程序语言来说,创建一个好的输入/输出系统并非易事。在充分理解Java I/O系统以便正确地运用之前,我们需要学习相当数量的类。,需要的朋友可以参考下
    2019-06-06
  • 一文详解Java如何创建和销毁对象

    一文详解Java如何创建和销毁对象

    Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。本文主要和大家介绍一下Java是如何创建和销毁对象的,希望对大家有所帮助
    2022-11-11
  • java实现最短路径算法之Dijkstra算法

    java实现最短路径算法之Dijkstra算法

    这篇文章主要介绍了java实现最短路径算法之Dijkstra算法, Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法,有兴趣的可以了解一下
    2017-10-10
  • Java使用正则获取括号里面的内容

    Java使用正则获取括号里面的内容

    这篇文章主要介绍了Java使用正则获取括号里面的内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 基于Mybatis Plus实现多表分页查询的示例代码

    基于Mybatis Plus实现多表分页查询的示例代码

    这篇文章主要介绍了基于Mybatis Plus实现多表分页查询的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 关于Maven依赖冲突解决之exclusions

    关于Maven依赖冲突解决之exclusions

    这篇文章主要介绍了关于Maven依赖冲突解决之exclusions用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java中的LinkedHashSet和TreeSet解读

    Java中的LinkedHashSet和TreeSet解读

    这篇文章主要介绍了Java中的LinkedHashSet和TreeSet解读,哈希表和链表实现的set接口哈希表决定了它元素是唯一的,而链表则保证了他是有序的(存储和取出顺序一致),元素按照一定规则排序,不是按储存时间排的,需要的朋友可以参考下
    2023-09-09
  • Mybatisplus自动填充实现方式及代码示例

    Mybatisplus自动填充实现方式及代码示例

    这篇文章主要介绍了Mybatisplus自动填充实现方式及代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论