springboot微服务前端传参数至后端的几个方式,@RequestBody如何传入多个参数@RequestParam

2023-10-27


一、问题

在接口测试工具中,常常要传入参数,初学者–也就是我菜鸡经常传错参数,不明白在Query还是Body里面传参,以及测试工具(AxxPoxx)测试下载接口的时候为什么发送数据成功却没有下载文档下来
后端参数传输方式


二、解决

query body
get,post。query参数拼接在地址上 post
注意:params只能是一个字符串不能传递对象类型的参数 若参数涉及传递对象,要用body

可以先看看http常见的请求方式
在get请求中陈晨辰呀

划重点!!!!get请求中—
在这里插入图片描述
但是注意!!get请求中,如果使用注解@RequestParam要注意设置required=false来处理如果传参为空的情况
含义:该参数是可传可不传的,修改require属性为false。默认为true,意思则是,必须要传该参数的值(该参数不可为空)
一般来说get请求中参数不加注解就默认表示传参可以为空
常用组合:
post ,put -----@requestBody
get ----- 无参数、@requestParam
delete ------@pathVariable
在这里插入图片描述


1.HttpServletRequest

(1)在数据中使用占位符(如需要传入的参数在数据库中使用的话)就可以获得;在这里插入图片描述

(2)直接使用getParameter就可以获得前端传来的参数
在这里插入图片描述

更多用法参考站长严长生

2.直接在地址栏上传入参数

使用@PathVariable注解:接收请求路径中占位符的值
上面的HttpServletRequest方式改成这种方式为:

@RequestMapping(value="/history/updateType/{user_id}/{type}")
public Object updateType(@PathVariable("user_id")String userId,@PathVariable("type")String type)

在访问接口地址的时候直接将要传入的参数放在占位符的位置即可。如上面接口访问,请求路径为

http://localhost:8080/history/updateType/001/1

注意:使用@RequestParam也可以直接在地址栏上输入传入的参数,只是路径变为http://localhost:8080/history/updateType?user_id&type=1

代码中的请求路径为
在这里插入图片描述

3.@RequestParam()

传多个参数的时候,在每个传入的参数前面加上注解@RequestParam()即可。
下面我不确定,只是在某个应用场景的时候用到了—需要配合使用post,但是post多用来inset,而不是query,所有一般来说如果请求方式是get的话就可以直接写多个参数而不用加注解

在这里插入图片描述
@RequestParam()还有个功能,就是能保证如果传参为空不会报错,因为@RequestParam()能让传参为空有默认值/不设默认值也不会出错.
另外它的参数value:可以让前后端的传参名保持一致,Archie_java
在这里插入图片描述

value:请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。比如上图中第一个参数如果不设置value=“page”,则前端传入的参数名必须为pageNum,否则在后台接口中pageNum将接收不到对应的数据
我们可以看注解的默认设置

@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 "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

4.使用@RequestBody如何传入多个参数

受益匪浅justry_deng
(1)首先要知道 @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
在这里插入图片描述
在这里插入图片描述
(2)@RequestBody一般使用post方式提交。并且
一个请求,只有一个RequestBody,但是可以有多个RequestParam
(3)那么问题是,只有一个RequestBody的时候,当我想要前端传过来多个参数怎么办?
先来看一个参数
在这里插入图片描述
再来看多个参数
在这里插入图片描述

5.@RequestParam,@PathParam,@PathVariable等注解区别

简短有力一年e度的夏天
@RequestParam与@PathVariable区别
清晰明了古柏树下
在这里插入图片描述
@RequestParam 与 @PathVariable的用例起床Oo
抓重点:

@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。
要访问一篇博客文章,这两种URL设计都是可以的:
通过@PathVariable,例如/blogs/1
通过@RequestParam,例如blogs?blogId=1
那么究竟应该选择哪一种呢?建议:
(1)当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
(2)当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam
例如我们会这样设计URL:
/blogs/{blogId}
/blogs?state=publish而不是/blogs/state/publish来表示处于发布状态的博客文章

6.AxxPOxx测试接口工具如何使用下载类的接口

如接口实现的是下载excel表,那么使用流将路径在测试工具中使用发现没有返回结果。其实只需要把地址路径复制粘贴至浏览器中即可下载。


三、歉意

我是在学习的过程中遇到的对我有帮助的博文就放链接至我的博文上,记录问题以防走丢。若侵权请联系我。我一定配合。感谢。

补充:平常自己写代码的时候的小小备注
我总结的不好,看到这个人讲的是我平常遇到的问题我才不是你的谁
划重点:

情况一:原因是由于头文件类型不对,可以在MediaType中选择合适的类型,例如GET和POST
情况二:jquery提交delete时,不支持@RequestParam,只支持@PathVariable形式
情况三:若api在调用的时候,如果存在重类型,但不重名;例如:/id与/name,两者在类型上是一样的
情况四:这里提示Required String parameter ‘XXX’ is not present并不一定是XXX的错,也有可能是后面的参数错误。总的来说就是页面传递的参数和后台接受参数名自不匹配。
情况五:传递的参数里面包含特殊符号,比如前台传递字符串不能包含逗号等。(待证明)
情况六:传的参数是undefined;

补充:
常见错误码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot微服务前端传参数至后端的几个方式,@RequestBody如何传入多个参数@RequestParam 的相关文章

随机推荐

  • 常用脚本(九)Unity_Input

    1 输出鼠标位置 在Update方法中 Debug Log Input mouseposition 2 判断鼠标是否点击 返回 True 和 false 每帧都输出 在Update方法中 Debug Log Input anykey 3 I
  • run()方法和start()方法的区别

    run 方法和start 方法的区别 文章目录 run 方法和start 方法的区别 一 start 是什么 二 run 是什么 三 具体代码实例 四 start 和run 方法的区别 参考 一 start 是什么 用 start方法来启动
  • 安全并正确地重启Elasticsearch集群

    文章目录 前言 问题原因其本质 提前准备 准备重启集群 更新集群 前言 elasticsearch本身具有高可用性 可以做到停机不停服务 在重启elasticsearch后可能存在数据丢失 或者是 启动ES后 怎么一直有大量的数据在迁移 问
  • 快速创建一个spring boot项目

    写了两年还在创建spring boot 项目 最近想自己尝试开发一个项目 所以随便记录一下吧 平常 工作都是现成的项目开发 在项目上加新功能之类的 除了工作平常回去也没琢磨 现在想多思考 为了国庆之后辞职 找工作做一个铺垫 分割线 选择一些
  • linux内核vmlinux生成过程简要分析

    最近工作不太忙 研究了一下Linux内核的编译过程 在此简要记录一下 obj zImage obj compressed vmlinux FORCE call if changed objcopy linux的内核 zImage 的生成依赖
  • 第二天(七)osg::Object* readObjectFile_const std::string& filename_const ReaderWriter::Options* options

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • 电脑老是安装一些来路不明的软件(如何解决)?

    目录 先解决自身可能出现的问题 上四大方法 先解决自身可能出现的问题 1 自行百度下载软件 没有到官网那去下载 进入一些假官网下载软件会附带一些流氓软件 看好官网地址再下载或者用安全软件那去下载 2 电脑的浏览器被劫持了 浏览器会有小广告
  • 智能指针与引用计数详解(二)

    在智能指针与引用计数详解 一 当中讲了智能指针还有改进的地方 下面具体问题具体分析 一 智能指针的赋值方法改进 上一章的赋值方法中只要是赋值都是右操作数引用计数加一 左操作数引用计数减一 没有考虑过引用计数对象自赋值的情况 比如按照上一章代
  • Windows键盘对应苹果的Option键

    用mini mac的用户 如果用的是windows的键盘 那么开发时功能键或多或少会有一些不适应 特别是在xCode4中 我就一直没有找到option对应的windows键 苹果有介绍 http support apple com kb H
  • Matlab学习——求解微分方程(组)

    介绍 1 在 Matlab 中 用大写字母 D 表示导数 Dy 表示 y 关于自变量的一阶导数 D2y 表示 y 关于自变量的二阶导数 依此类推 函数 dsolve 用来解决常微分方程 组 的求解问题 调用格式为 X dsolve eqn1
  • 自定义指令 v-loading

    1 在src下创建directive文件夹 2 在directive文件夹下创建loading文件夹 3 loading文件夹内创建index js和loading vue 目录图 4 index js src directive load
  • QtCreator 快捷键问题记录

    我目前用的QtCreator Mac版8 0 0 具体信息如下 一般来说QtCreator的快捷键和设置项在windows下也是一样的 在QtCreator gt Options gt Environment gt Keyboard中可以找
  • SpringBoot整合office转换与预览

    文章目录 一 介绍 1 简介 2 aspose简介 3 jodconverter简介 二 springboot整合aspose实战 1 前期依赖准备 1 1 介绍 1 2 项目直接引入jar包 1 3 maven添加本地包 2 office
  • 使用Retrofit上传实体类到服务端(笔记)

    一 服务端 1 需要对参数用 RequestBody这个注解进行修饰 SpringBoot会自动将前端传过来的JSON数据反序列化成Java对象 登录 param requestVo return PostMapping value log
  • DOTA数据集标签txt文件转为xml文件

    文章目录 1 txt文件格式 2 xml文件格式 3 一般的txt到xml的转换思路 4 最终使用的txt到xml转换的脚本 5 之后可能用到的xml转换到txt的脚本 1 txt文件格式 DOTA数据集的txt文件格式如下 其中 每一行的
  • Springboot整合SpringSecurity

    使用Basic认证模式 1 maven依赖
  • 26.JavaWeb-SpringSecurity安全框架

    1 SpringSecurity安全框架 Spring Security是一个功能强大且灵活的安全框架 它专注于为Java应用程序提供身份验证 Authentication 授权 Authorization 和其他安全功能 Spring S
  • csv反序列化_序列化与反序列化

    toc 定义 序列化 将对象或数据结构转换成约定格式数据的过程 反序列化 将约定格式的数据转换成对象或数据结构的过程 通常我们将这种 约定格式的数据 称之为序列化协议 根据协议的特点序列化协议可以细分为文本序列化协议 以下简称文本协议 和二
  • 网线直连NUC调试并使用VSCode实现X11转发(Jetson,树莓派适用)

    1 场景描述 此种场景下 NUC与PC机通过一根网线进行连接 网线负责PC与NUC进行通信 SSH连接 同时可以将NUC的图形界面转发到PC 远程桌面或X11窗口转发均可 方便战队成员在没有显示器的场景下对NUC进行调试 配置示例如下图所示
  • springboot微服务前端传参数至后端的几个方式,@RequestBody如何传入多个参数@RequestParam

    一 问题 在接口测试工具中 常常要传入参数 初学者 也就是我菜鸡经常传错参数 不明白在Query还是Body里面传参 以及测试工具 AxxPoxx 测试下载接口的时候为什么发送数据成功却没有下载文档下来 后端参数传输方式 二 解决 quer