JavaEE SpringMVC 请求传参的示例详解

 更新时间:2025年02月26日 10:29:14   作者:鸽鸽程序猿  
这篇文章详细介绍了SpringMVC中请求参数的传递和接收方式,包括传递单个参数、多个参数、对象参数、数组参数、集合参数以及JSON数据的传递和处理,感兴趣的朋友一起看看吧

一、请求

访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收.
传递参数, 咱们主要是使⽤浏览器和Postman来模拟.

二、传递单个参数

接收单个参数, 在 Spring MVC 中直接⽤⽅法中的参数就可以

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m1")
    public String m1(String request) {
        return  request;        
    }
}

使用浏览器访问:http://127.0.0.1:8080/user/m1?request=hello

使用Postman:

这两种都是键值对模型,其中的键要与方法的参数名一样。

注意事项:

使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误, 类型不匹配时, 会报400错误.

三、传递多个参数

和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m3")
    public String m3(String s1, int a) {
        return s1+"参数:"+a;
    }
}

使用浏览器访问:http://127.0.0.1:8080/user/m3?s1=你好&a=100

使用Postman:

注意事项:

  • 这两种都是键值对模型,其中的键要与方法的参数名一样。
  • 参数的位置是不影响后端获取参数的结果.
  • 基本类型来接收参数时,一样有上述问题。

四、传递对象

如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明. 我们不妨把这些参数封装为⼀个对象.

实例:

public class Person {
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m4")
    public String m4(Person person){
        return person.toString();
    }
}    

注意事项:

  • 要传类中的成员名,不包含类对象名。
  • 由于类定义会给成员默认值,这里没有基本类型不传值报错问题。

五、@RequestParam注解

后端参数重命名(后端参数映射)

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致。
使用@RequestParam注解

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m5")
    public String m5(@RequestParam(value = "s")String string) {
        return string;
    }
}

注意事项:

  • 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
    致, 才能进⾏参数绑定和赋值.
  • 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数.
  • 要将参数变成非必传参数,需要将required = false

六、传递数组

Spring MVC 可以⾃动绑定数组参数的赋值

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m6")
    public String m6(String[] strings) {
        return Arrays.toString(strings);
    }
}

注意事项:

  • 使用Postman传参的时候,每个数组值通过逗号隔开。
  • 当需要传逗号作为值的时候,就需要传解码encode后的值。
  • 在使用浏览器URL访问时,也需要将非英文字母,全部encode。

七、传递集合,@RequestParam

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系

实例:

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/m7")
    public String m7(@RequestParam ArrayList<String> strings) {
        return  strings.toString();
    }
}

注意事项:

  • 与传递数组同

八、传递JSON数据

JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.

JOSN语法:

  • 数据在 键值对(Key-Value) 中
  • 数据由逗号, 分隔
  • 对象⽤ { } 表⽰
  • 数组⽤ [ ] 表⽰
  • 值可以为对象, 也可以为数组, 数组中可以包含多个对象
  • 键key和值value之间通过冒号分割
  • 键值对之间使用逗号分割

JSON优点

  • 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
  • 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
  • 传输轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
  • 速度易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  • 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼的安全性

8.1 JSON字符串和Java对象互转

我们在这介绍使用Jackson方式转换,因为这个是Spring中集成了的,不用引入依赖。
还有fastjson,gson。

8.1.1 @Test注解

在我们写测试代码时我们在test这个包下面写。
我们可以直接写main方法,也可以使用@Test这个方法注解在测试方法前面加上,这个注解作用相当于为方法开一个线程。所以可以写多个被@Test修饰的方法同时运行。

8.1.2 Java对象转JSON

使用类ObjectMapper下面的writeValueAsString方法。类对象必须要有无参构造函数。

步骤:

  • 创建ObjectMapper对象
  • 创建对象
  • 直接调用writeValueAsString 将对象转换为JSON
 @Test
void testObjectToJson() throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        //创建对象
        Person person = new Person();
        person.setId(1);
        person.setName("zhangsan");
        person.setPassword("111");
        //对象转JSON
        String j = objectMapper.writeValueAsString(person);
        System.out.println(j);
    }

8.1.3 JSON转Java对象

使用类ObjectMapper下面的readValue方法。

  • 创建ObjectMapper对象
  • 创建json
  • 直接调用readValue将json转换为对象
@Test
    void testJsonToObject() throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        //创建json
        String s = "{\"id\":1,\"name\":\"zhangsan\",\"password\":\"111\"}";
		//JSON转对象
        Person person = objectMapper.readValue(s,Person.class);
        System.out.println(person);
    }

8.2 传递JSON

8.3 后端实现

我们只需要在方法参数上加上@RequestBody这个注解。

RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中

@RequestMapping(value ="/j1")
    public String j1(@RequestBody Person person) {
        return person.toString();
    }

postman传参

到此这篇关于 JavaEE SpringMVC 请求传参的文章就介绍到这了,更多相关 JavaEE SpringMVC 请求传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot中整合knife4j接口文档的过程详解

    Springboot中整合knife4j接口文档的过程详解

    knife4j就swagger的升级版API文档的一个框架,但是用起来比swagger方便多了,UI更加丰富,这篇文章主要介绍了Springboot中整合knife4j接口文档,需要的朋友可以参考下
    2022-04-04
  • mybatis配置对象包含对象以及List的方式

    mybatis配置对象包含对象以及List的方式

    这篇文章主要介绍了mybatis配置对象包含对象以及List的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 图解Java经典算法冒泡排序的原理与实现

    图解Java经典算法冒泡排序的原理与实现

    冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
    2022-09-09
  • SpringBoot中4种接口幂等性的实现策略

    SpringBoot中4种接口幂等性的实现策略

    幂等性是指对同一操作执行多次与执行一次的效果相同,不会因为重复执行而产生副作用,本文整理了4个SpringBoot实现接口幂等性的方法,大家可以根据需要进行选择
    2025-04-04
  • Java实现插入排序算法可视化的示例代码

    Java实现插入排序算法可视化的示例代码

    插入排序的算法描述是一种简单直观的排序算法。其原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将用Java语言实现插入排序算法并进行可视化,感兴趣的可以了解一下
    2022-08-08
  • Java中的clone方法详解_动力节点Java学院整理

    Java中的clone方法详解_动力节点Java学院整理

    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。下面通过本文给大家介绍java中的clone方法,感兴趣的朋友一起看看吧
    2017-06-06
  • 详解Java实现LRU缓存

    详解Java实现LRU缓存

    这篇文章主要介绍了详解Java实现LRU缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • SpringSecurity实现自定义登录方式

    SpringSecurity实现自定义登录方式

    本文介绍自定义登录流程,包括自定义AuthenticationToken、AuthenticationFilter、AuthenticationProvider以及SecurityConfig配置类,详细解析了认证流程的实现,为开发人员提供了具体的实施指导和参考
    2024-09-09
  • springboot应用中使用过滤器的过程详解

    springboot应用中使用过滤器的过程详解

    过滤器通常用于实现跨切面的功能,例如身份验证、日志记录、请求和响应的修改、性能监控等,这篇文章主要介绍了springboot应用中使用过滤器,需要的朋友可以参考下
    2023-06-06
  • Java实现手写线程池实例并测试详解

    Java实现手写线程池实例并测试详解

    这篇文章主要来模拟一下线程池和工作队列的流程,以及编写代码和测试类进行测试。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02

最新评论