@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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java动态线程池插件dynamic-tp集成过程浅析

    Java动态线程池插件dynamic-tp集成过程浅析

    这篇文章主要介绍了Java动态线程池插件dynamic-tp集成过程,dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改
    2023-03-03
  • 利用feign调用返回object类型转换成实体

    利用feign调用返回object类型转换成实体

    这篇文章主要介绍了利用feign调用返回object类型转换成实体,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 简单了解SPRINGIOC的底层原理演变过程

    简单了解SPRINGIOC的底层原理演变过程

    这篇文章主要介绍了简单了解SPRINGIOC的底层原理演变过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Springboot下使用Redis管道(pipeline)进行批量操作

    Springboot下使用Redis管道(pipeline)进行批量操作

    本文主要介绍了Spring boot 下使用Redis管道(pipeline)进行批量操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringBoot整合SpringSecurity实现认证拦截的教程

    SpringBoot整合SpringSecurity实现认证拦截的教程

    我们写的任何一个项目,都应该有安全防护,不应该让这个项目进行“裸奔”,否则很容易被别人进行攻击。而在SpringBoot环境中,其实可以很容易实现安全保护,本文给大家介绍SpringBoot如何整合SpringSecurity实现认证拦截,需要的朋友可以参考下
    2023-05-05
  • JavaMail邮件简介及API概述第一篇

    JavaMail邮件简介及API概述第一篇

    这篇文章主要为大家详细介绍了JavaMail邮件简介及API概述第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Java语言资源国际化步骤解析

    Java语言资源国际化步骤解析

    这篇文章主要介绍了Java语言资源国际化步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • mybatis拦截器注册初始化编写示例及如何生效详解

    mybatis拦截器注册初始化编写示例及如何生效详解

    这篇文章主要为大家介绍了mybatis拦截器注册初始化编写示例及如何生效详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • SpringBoot集成Druid实现监控功能的示例代码

    SpringBoot集成Druid实现监控功能的示例代码

    这篇文章主要介绍了SpringBoot集成Druid实现监控功能,Druid是阿里巴巴开发的号称为监控而生的数据库连接池,可以很好的监控DB池连接和SQL的执行情况,天生就是针对监控而生的DB连接池,文中通过代码示例讲解非常详细,需要的朋友可以参考下
    2024-02-02
  • 在Java开发中无法绕开的SpringBoot框架详解

    在Java开发中无法绕开的SpringBoot框架详解

    SpringBoot是一个基于Spring框架的快速开发框架,它的出现极大地简化了Spring应用的开发流程,SpringBoot是一个快速开发的框架,它提供了一种快速构建应用程序的方式,本文给大家介绍在Java开发中无法绕开的框架:SpringBoot,感兴趣的朋友一起看看吧
    2023-09-09

最新评论