springboot接口Get请求实体类入参

ops/2024/10/22 8:28:58/

在springboot中,对HTTP GET请求,通常不会将请求体(body)作为主要的数据传输方式,因为GET请求通常用于请求数据,而不是发送数据到服务器(尽管从技术上讲,GET请求可以包含请求体,但这并不常见,也不符合RESTful API的设计原则)。因此,对于GET请求的入参,通常不会使用@RequestBody注解。

一、springboot控制器接收GET请求入参
java">    @GetMapping("getParam")public String getParam(@RequestParam(value = "name", required = false, defaultValue = "liming") String username) {return username;}

通常使用@RequestParam注解控制接收的入参;

二、springboot自动将GET请求入参转为实体类
java">    @GetMapping("getParam1")public String getParam1(@Validated Job job) {return "";}

springboot会自动的将GET请求入参转换为入参实体类对象,但是参数名必须和实体类中的属性字段一一对应;如果要对参数进行校验可以添加@Validated注解,在具体字段添加校验注解,如:@NotEmpty。

三、springboot的GET请求入参为请求体(body类型)
java">   @GetMapping("getParam1")public String getParam1(@Validated @RequestBody Job job) {return "";}

如果请求体为body类型,则接收的入参实体类对象前必须用@RequestBody标注,否则参数无法接收到。

四、问题思考

如果通过正常的GET请求如下两种方案都是可以正常获取请求入参,如何可以有一个比较友好的方案解决将两者获取的参数合并后数据重复的问题,目前暂时未想到比较好的方法,因为每种参数传递都有可能发生,容忍重复,而不是参数丢失。

  • 通过HttpServletReqeust获取GET请求入参
java">            Enumeration<String> names = request.getParameterNames();while (names.hasMoreElements()) {String key = names.nextElement();if (!paramMap.containsKey(key)) {paramMap.put(key, request.getParameter(key));}}
  • 通过MethodInvocation获取方法参数
java">    public static Map<String, Object> getMethodArgs(MethodInvocation invocation, String... field) {Method method = invocation.getMethod();Map<String, Object> paramMap = Maps.newHashMap();List<String> list = ParamNameUtils.getParamNames(method);Annotation[][] annotations = method.getParameterAnnotations();Object[] obj = invocation.getArguments();for (int i = 0; i < list.size(); i++) {String name = list.get(i);Object value = obj[i];if (isFinal(value)) {continue;}paramMap.put(name, value);}return paramMap;return Collections.emptyMap();}

开源 SDK:https://github.com/mingyang66/spring-parent


http://www.ppmy.cn/ops/127516.html

相关文章

生成文件夹 - python 实现

生成文件夹保存图片和文本等信息。 代码具体实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-04-13 # Author: DataBall - XIAN # Function: 生成文件夹import os if __name__ "__main__":path "./dataset"if not os.path.exists(path): # 如果…

SCR相对标准偏差、氨氮比、截面速度,多平面计算

SCR截面速度、氨氮比等标准及相对标准偏差计算。 程序用来处理fluent通过xyplot导出的数据&#xff0c;导出可以选择多个平面&#xff0c;可计算标准偏差SD、相对标准偏差RSD&#xff0c;平均速度,适用于求解多个平面 # -*- coding: utf-8 -*- """ Created on …

无人机:无线电波控制技术!

一、无线电波控制技术 通过无线电波与无人机上的接收机进行通信。当飞手在遥控器上操作控制杆时&#xff0c;这些动作会被转换为无线电波信号&#xff0c;并发送给无人机上的接收机。接收机接收到信号后&#xff0c;会解读控制杆的位移&#xff0c;并将其转化为数字信号&#…

S7--环境搭建基本操作

1.修改蓝牙名称和地址 工程路径:$ADK_ROOT\adk\src\filesystems\CDA2\factory_default_config\ 在subsys7_config5.htf中 DeviceName = "DEVICE_NAME“ # replace with your device name BD_ADDRESS=[00 FF 00 5B 02 00] # replace with your BD address 2.earbud工程修改…

音视频:安防监控

文章目录 一、安防系统二、视频监控系统的组成三、相关机制1.看门狗进程2.心跳保活机制 四、相关协议和工具库1.FFmpeg2.RTSP3.WebRTC4.其他(1)OpenCV(2)Telnet 五、视频接口1.DVI2.VGA3.DP4.HDMI 一、安防系统 安防系统主要包括&#xff1a;视频监控系统、入侵报警系统、出入…

C++ | Leetcode C++题解之第498题对角线遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> findDiagonalOrder(vector<vector<int>>& mat) {int m mat.size();int n mat[0].size();vector<int> res;for (int i 0; i < m n - 1; i) {if (i % 2) {int x i …

iOS 大数相加

大数相加的技术点在于进位(两数相加大于10之后进位) 思路如下: 1.从右往左便利,依次去除两个数M和N的个位数、十位数、百位数~~~相加 2.如果M遍历完了,N还没完,那么M用0作为位数上的加数: 代码如下: - (void)bigNumAdd:(NSMutableArray *)arrayA ArrayB:(NSMutableArray *…

【网安第三章】——XSS

XSS-跨站脚本攻击 反射型XSS 反射型XSS攻击通常发生在Web应用程序未能充分处理用户输入的情况下。攻击者利用应用程序的漏洞&#xff0c;将恶意脚本嵌入到URL参数中&#xff0c;当受害者点击这个恶意链接时&#xff0c;Web应用程序会将URL参数的内容作为响应的一部分发送给用户…