@PathVariable、@RequestParam和@RequestBody的区别

 更新时间:2023年05月17日 09:13:40   作者:bai_student  
本文主要介绍了@PathVariable、@RequestParam和@RequestBody的区别和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. @PathVariable

@RequestMapping(value="/{id}")
public String getId(@PathVariable(value="id") String id) {
    return id;
}

1.1 @PathVariable 映射 URL 绑定的占位符

  • 带占位符的 URL 是 Spring3.0 新增的功能
  • 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器(controller)处理方法的形参中,URL 中的 {xx} 占位符可以通过@PathVariable(“xx“) 绑定到操作方法的形参中
  • 是根据请求方法进行类的区别

1.2 @PathVariable的参数

  • String value:可指定占位符 { } 中的参数名,若只指定value这一个属性可省略属性名不写,若占位符中的参数名和处理方法中的参数名相同可省略此属性。
  • String name:和value一样,两个属性指定其一即可。
  • boolean required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常

2. @RequestParam

@RequestMapping(value="/user")
public String getName(@RequestParam(value="name") String name) {
    return name;
}

在SpringMVC框架中,获取URL中的参数,也就是?key1=value1&key2=value2这样的参数列表。通过注解@RequestParam将URL中的参数绑定到处理函数方法的变量中。

2.1 @RequestParam 用于将指定的请求参数赋值给方法中的形参

  • 如果参数前写了@RequestParam(x),那么前端必须有对应的x名字才行(不管其是否有值),如果没有x名的话,那么请求会出错。
  • 如果参数前不写@RequestParam(x),那么就前端可以有可以没有对应的x名字才行,如果有x名的话,那么就会自动匹配;没有的话,请求也能正确发送。

2.2 @RequestParam的参数

  • String value:请求中传入参数的名称,如果不设置value值,则会默认为该变量名。
  • String name:和value一样,两个属性指定其一即可。
  • boolean required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常
  • String defaultValue:参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。

3. @RequestBody

    @PostMapping("/editUser")
    public void edit(@RequestBody User user){
        System.out.println(user);
    }

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);使用@RequestBody接收数据时,是用POST等方式进行提交。

  • 后端@RequestBody注解对应的类,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
  • json字符串中,如果value为"“的话,后端对应属性如果是String类型的,那么接受到的就是”",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。
  • json字符串中,如果value为null的话,后端对应收到的就是null。
  • 如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null 或""都行。

到此这篇关于@PathVariable、@RequestParam和@RequestBody的区别和使用的文章就介绍到这了,更多相关@PathVariable @RequestParam @RequestBody内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot结合ElasticSearch实现模糊查询的项目实践

    SpringBoot结合ElasticSearch实现模糊查询的项目实践

    本文主要介绍了SpringBoot结合ElasticSearch实现模糊查询的项目实践,主要实现模糊查询、批量CRUD、排序、分页和高亮功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 使用Java打印出所有的水仙花数的解决方法

    使用Java打印出所有的水仙花数的解决方法

    水仙花数也被称为超完全数字不变数、自恋数、自幂数,是指一个 n 位数 (n≥3),它的每个位上的数字的 n 次幂之和等于它本身,本文将通过 Java 语言来实现一个简单的程序,用于找出并打印所有三位数中的水仙花数,需要的朋友可以参考下
    2026-01-01
  • 详解Java中常见语法糖的使用

    详解Java中常见语法糖的使用

    语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,本文主要为大家分享了12个java中常见的语法糖,感兴趣的小伙伴可以了解下
    2023-11-11
  • Java使用FastExcel高效读取和写入Excel

    Java使用FastExcel高效读取和写入Excel

    FastExcel 是一个 Java 库,旨在高效地读取和写入 Excel 文件,它最初是 EasyExcel 的分叉版本,旨在提供增强的性能、持续维护和新功能,同时保持与原始 EasyExcel API 的兼容性,本文给大家介绍了Java如何使用FastExcel高效读取和写入Excel,需要的朋友可以参考下
    2025-11-11
  • 关于ThreadLocal和InheritableThreadLocal解析

    关于ThreadLocal和InheritableThreadLocal解析

    这篇文章主要介绍了关于ThreadLocal和InheritableThreadLocal解析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Java利用深度搜索解决数独游戏详解

    Java利用深度搜索解决数独游戏详解

    数独是一项非常简单的任务。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。本文将利用Java编写一个程序来解决给定的数独任务,感兴趣的可以动手尝试一下
    2022-08-08
  • IDEA 通过脚本配置终端提示符样式的方法

    IDEA 通过脚本配置终端提示符样式的方法

    这篇文章给大家介绍IDEA通过脚本配置终端提示符样式的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-08-08
  • 微信支付java版本之Native付款

    微信支付java版本之Native付款

    这篇文章主要为大家详细介绍了微信支付java版本之Native付款,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解

    ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解

    这篇文章主要介绍了ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解,Rocketmq 消费者在高峰期希望手动减少消费线程数,通过DefaultMQPushConsumer.updateCorePoolSize方法可以调用内部的setCorePoolSize设置多线程核心线程数,需要的朋友可以参考下
    2023-10-10
  • spring kafka @KafkaListener详解与使用过程

    spring kafka @KafkaListener详解与使用过程

    这篇文章主要介绍了spring-kafka @KafkaListener详解与使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论