@RequestParam和@RequestBody

这篇具有很好参考价值的文章主要介绍了@RequestParam和@RequestBody。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在开发中我们往往会使用到post、get、delete等方法去请求数据,那么我们如何接到前端传过来的数据呢。不同数据类型又如何接收呢?
我们在使用postman的时候看到五花八门的请求方法,众多的传输数据方法。
requestparam什么时候用,java,postman,spring boot
我们都知道在springboot中使用@RequestParam和@RequestBody去接收数据,带有时候又接收不到,或者报错,我们就来看看什么时候用@RequestParam什么时候用@RequestBody

@RequestParam

以下是spring对@RequestParam的介绍

requestparam什么时候用,java,postman,spring boot

spring中介绍

@RequestParam用来绑定查询参数(也就是在URL上的参数)和from data(也就是请求体,对应postman中的 from-data)的。
只要我发起请求时删除放在URL上和使用from data传参都可以使用 @RequestParam来接收

spring中详解

requestparam什么时候用,java,postman,spring boot

以上是spring文档中的解释,我们来逐条分析

1、 第1条说明 @RequestParam是有属性可设置的
@RequestParam注解主要的参数:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {

	@AliasFor("name")
	String value() default "";
	
	@AliasFor("value")
	String name() default "";
	
	boolean required() default true;
	
	String defaultValue() default ValueConstants.DEFAULT_NONE;

}
  • value:请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。
  • required:该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,如果设置为false时,当请求中没有此参数,将会默认为null
  • defaultValue:参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}"
  • name:作用同value相同
  • 这些属性是可选的,可以不设置

使用实例:

@RequestParam(value = "param",required = false,defaultValue = "12")
2、 第2条说明可以将接收到的字符串自动转化为对应的类型

Controller

@PostMapping("/test")
public R test(@RequestParam Long l,
              @RequestParam Integer i,
              @RequestParam Date date){
    return R.ok().put("l",l).put("i",i).put("date",date);
}

请求:
requestparam什么时候用,java,postman,spring boot

3、 第3条说明可以使用数组或者列表去接收同一个值

也就是说我们传多个一样名称的值,可以使用数组或者列表去接收
使用实例:
Cotroller:

@GetMapping("/test")
//这里的数组换成列表也是可以的
public R test(@RequestParam("name") String[] names){
    return R.ok().put("data",JSONUtil.toJsonStr(names));
}

请求:
requestparam什么时候用,java,postman,spring boot
这里请求换成post中的formdata也是可以的
requestparam什么时候用,java,postman,spring boot

4、 第4条说明可以使用Map去接收请求参数

当我们不知道传过来的是说明参数时就可以使用Map去接收
Controller

@PostMapping("/test")
public R test(@RequestParam Map<String,Object> param){
    return R.ok().put("data",param);
}

请求:
requestparam什么时候用,java,postman,spring boot

@RequestBody

这里是Spring对@RequestBody的解读
requestparam什么时候用,java,postman,spring boot
这里主要提到了两点,第一点是使用@RequestBody注解,spring会通过HttpMessageConverter去读取并且反序列化成为实体类。显然这里传的是json或者xml等类型的格式。所以@RequestBody一般使用在接收json的时候。
而且是通过HttpMessageConverter去读取的,所以这里只读取一次就可以把全部数据读取到。所以不建议同时使用多个@RequestBody。
还说了可以使用@Valid去校验数据,这里我就不多介绍了,可以去查看我校验数据那篇文章
springboot数据校验——Hibernate Validator

我们可以结合着@RequestParam来使用,使用@RequestParam来接收URL数据,使用@RequestBody来接收json数据。

总结:文章来源地址https://www.toymoban.com/news/detail-626760.html

  • 当同时使用@RequestParam和@RequestBody时,@RequestParam指定的参数可以是普通元素、数组、集合、对象等等(即:当,@RequestBody 与@RequestParam可以同时使用时,原SpringMVC接收参数的机制不变,只不过@RequestBody接收的是请求体里面的数据;而@RequestParam接收的是请求路径中的key-value数据,所以它会被切面进行处理,因而可以用普通元素、数组、集合、对象等接收)。
    即:如果参数时放在请求体中,以application/json的格式传入后台接口,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台要用@RequestParam来接收,或者在形参前不贴@RequestParam注解也能接收。
  • 如果参数前写了@RequestParam(xxx),那么前端发送的请求路径中必须有对应的xxx参数才行(不管其是否有值,当然可以通过设置require属性来调节是否必须传,如@RequestParam(xxx, required = false)),如果没有xxx参数且没有设置require = false的话,那么请求会出错,报400。
  • 如果接口形参前不贴@RequestParam注解,那么请求路径中的xxx参数可有可无,如果有,会自动匹配;如果没有,请求也能正确发送。
  • 这里与feign或者openfeign消费远程调用服务不同;feign或者openfeign远程调用服务时,如果参数前什么也不写,那么会被默认是@RequestBody的。

到了这里,关于@RequestParam和@RequestBody的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PostMan、ApiFox等工具Post请求中@RequestParam和@RequestBody的混合使用如何传参

    方法签名 以ApiFox为例子 @RequestParam的Params的参数正常传参 @RequestBody的参数要以json的格式传输 同时Header中要指明 Content-Type=application/json 这样就OK了。 祝:工作顺利,永不加班,生活开心。

    2024年02月05日
    浏览(42)
  • 【问题】java序列化,什么时候使用

    把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2)在网络上传送对象的字节序列。 一般来说如果你的对象需要网络传

    2024年02月12日
    浏览(32)
  • Spring MVC的@RequestParam分析

    本篇文章涉及到一下相关问题 1.报错Required String parameter \\\'xx\\\' is not present 2.@RequestParam接收post请求参数报错 3.@RequestParam使用原理 4.springmvc使用@RequestParam一样的参数名,怎么接收不到。 5.axios发送post请求,springMVC接收不到数据问题 代码中是规定了请求方式 POST ,使用 @RequestPara

    2023年04月23日
    浏览(31)
  • spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

    一、主类: 二、配置类: 三、singleton bean的创建流程 运行到context.refresh(); 进入refresh方法: 向下运行到红线位置时: 会实例化所有的singleton bean.进入finisheBeanFactoryInitialization方法: 向下拖动代码,可以看到beanFactory.preInstantiateSingletons(); 进入preInstantiateSingletons方法: 可以看

    2024年02月16日
    浏览(37)
  • 深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

    🎉深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平

    2024年02月04日
    浏览(52)
  • Java/Spring/Postman下载文件名称乱码处理

    由于C端的解析方式不一,有时下载文件时会产生乱码 配置为 attachment;filename=%20.xlsx 形式 部分浏览器可正常解析,部分不行(如Postman) 处理: 配置为 attachment;filename=%20.xlsx;filename*=utf-8\\\'\\\'%20.xlsx 形式

    2024年02月11日
    浏览(50)
  • 详细分析Java中的@RequestParam和@RequestBody

    该知识点主要来源于SpringMVC:SpringMVC从入门到精通(全) 慢慢作为一名全栈,偶尔看项目使用 @RequestParam 或者 @RequestBody ,对此需要做一个深度的总结,防止混淆 @RequestParam 注解用于从HTTP请求中提取查询参数或表单参数。 其中一些常用的属性参数包括 name 、 defaultValue 和 r

    2024年04月26日
    浏览(36)
  • Java替换RequestBody和RequestParam参数的属性

    Java替换RequstBody和RequestParam参数的属性 近期由于接手的老项目中存在所有接口中新增一个加密串来给接口做一个加密效果(项目历史原因,不方便上Jwt授权这套),所以就研究了一下Http请求链路,发现可以通过 javax.servlet.Filter 去实现 首先通过继续 HttpServletRequestWrapper 来达到获

    2024年02月08日
    浏览(41)
  • 这是一条求助贴(postman测试的时候一直是404)

    看到这个问题是404的时候总感觉不该求助大家,404多常见一看就是简单的路径问题,我的好像不是,我把我的问题奉上。 首先我先给出我的url 这是我的postman的截图  电脑的ip可以ping通  项目名称:  项目的服务名: 接口名和参数   url没有问题 tomcat也可以正常启动 不知道

    2024年02月11日
    浏览(30)
  • 使用PostMan测试接口的时候如何在Header中添加token验证

    由于业务要求,每次接口请求都是post方式,且头部需要在自定义字段中定义token字段 在Authorization中添加APIKey 然后添加token和token的值,因为这里只是简单的开发个测试接口,所以不能通过登录验证去自动生成动态token,然后将token的返回值赋于Header中的token,所以就直接指定一

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包