springboot接口Get请求实体类入参

news2024/10/22 6:00:53

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

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

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

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

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

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

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

四、问题思考

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

  • 通过HttpServletReqeust获取GET请求入参
            Enumeration<String> names = request.getParameterNames();
            while (names.hasMoreElements()) {
                String key = names.nextElement();
                if (!paramMap.containsKey(key)) {
                    paramMap.put(key, request.getParameter(key));
                }
            }
  • 通过MethodInvocation获取方法参数
    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.coloradmin.cn/o/2220589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ionic Capacitor 生成 Android 应用

官方文档 https://ionic.nodejs.cn/developing/android/ https://capacitorjs.com/docs/getting-started 1、创建新的 Capacitor 应用程序 空目录下面 npm init capacitor/app2、install Capacitor npm install npm start在这里插入图片描述 3、生成dist目录 npm run buil…

ChatGPT 现已登陆 Windows 平台

今天&#xff0c;OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示&#xff0c;该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户&#xff0c;是一个早期版本&#xff0c;将在今年晚些时候推出"完整体验"。…

二、PyCharm基本设置

PyCharm基本设置 前言一、设置中文汉化二、设置代码字体颜色三、设置鼠标滚轮调整字体大小四、修改 PyCharm 运行内存4.1 方式一4.1 方式二 五、显示 PyCharm 运行时内存六、设置代码模版配置的参数有&#xff1a; 七、PyCharm设置背景图总结 前言 为了让我们的 PyCharm 更好用…

Axure中继器实现时间读取和修改

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;中继器实现时间读取和修改 主要内容&#xff1a;中继器内不同时间格式的向外读取&#xff0c;和向内赋值&#xff0c;实现中继器时间的修改 应用场…

口电气设备:认证这道坎,如何跨越才能通全球?

今年国内各行各业都非常卷&#xff0c;出口成了一些公司的选择&#xff0c;但出口的电气设备往往不能跳过各种认证&#xff0c;这是市场准入的一部分&#xff0c;必须通过认证以满足当地的电气设备规范&#xff0c;比如出口欧盟需要CE认证 出口美国需要UL认证&#xff0c;加拿大…

ajax 读取文件

DOMException: Failed to read the responseXML property from XMLHttpRequest: The value is only accessible if the objects responseType is or document (was blob). at XMLHttpRequest.r ( $.ajax({ url: 未来之窗_服务, method: GET, …

展会亮点回顾|HMS汽车工业通信解决方案

2024 汽车测试及质量监控博览会&#xff08;中国&#xff09;&#xff08;Testing Expo China – Automotive&#xff09;于 8 月 28 日至 30 日在上海世博展览馆顺利举行。作为汽车测试技术领域的顶级盛会&#xff0c;来自全球的行业领袖和技术专家齐聚一堂&#xff0c;共同探…

基于Spring Boot、Vue和MyBatis的前后端分离座位管理系统:增删改查功能入门指南

在项目开发和工作实践中&#xff0c;创作灵感往往来自于对日常经验的总结与反思。通过记录技术难点和解决方案&#xff0c;不仅可以加深对问题的理解&#xff0c;还能为后续项目的优化提供参考。与此同时&#xff0c;撰写技术笔记、分享职场心得&#xff0c;不仅是对自己成长的…

Print Appearances Page 打印外观页面

Print Appearances 页面提供了设计时工具&#xff0c;用于自定义在打印网格控件时用于绘制 View 元素的外观。它提供对 BaseView.AppearancePrint 集合的设计时访问。此页面如下图所示。 当前在列表框中选择的 AppearanceObject 的外观设置在属性网格中列出。所有更改都会立即反…

OpenWRT 和 Padavan 路由器配置网络打印机 实现远程打印

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 之前有给大家介绍过 Armbian 安装 CUPS 作为打印服务器&#xff0c;像是 N1 盒子、玩客云&#xff0c;甚至是随身 WiFi 都可以通过 CUPS 来进行打印。但是有些朋友不想专门为打印机添置一个设备&#xff0…

前端实现鼠标可拖动弹框

目录 一、使用原生JS实现 1.HTML结构 2.CSS样式 3.使用JavaScript实现弹框的可拖动功能 二、使用Vue实现 分享一下前端常见功能“可拖动弹框”的实现方式&#xff0c;分别用原生JS和Vue实现。 一、使用原生JS实现 1.HTML结构 首先创建一个弹框的HTML结构&#xff0c;例如…

边缘计算网关助力煤矿安全远程监控系统

煤矿开采环境复杂&#xff0c;危险程度高&#xff0c;每一次事故都带给行业血淋淋的教训&#xff0c;安全问题也是政府与行业亟待解决的难题。伴随着技术的发展&#xff0c;煤矿智能化成为行业探索的新方向&#xff0c;降低安全风险也是智能化的重要目标之一。防微杜渐是安全生…

基于neo4j的体育运动员问答问答系统

你是不是也为毕业项目伤透了脑筋&#xff1f;我们为你准备了一个创新且实用的技术项目——基于neo4j的体育运动员问答系统。无论你是对图数据库技术感兴趣&#xff0c;还是想在自然语言处理方面有所突破&#xff0c;这套系统都能让你在答辩时脱颖而出&#xff01; &#x1f3a…

论文阅读——Restormer

项目地址&#xff1a; GitHub - swz30/Restormer: [CVPR 2022--Oral] Restormer: Efficient Transformer for High-Resolution Image Restoration. SOTA for motion deblurring, image deraining, denoising (Gaussian/real data), and defocus deblurring. 论文地址&#xf…

Angular 保姆级别教程三

RxJS 13.1.1 什么是 RxJS ? RxJS 是一个用于处理异步编程的 JavaScript 库&#xff0c;目标是使编写异步和基于回调的代码更容易。 13.1.2 为什么要学习 RxJS ? 就像 Angular 深度集成 TypeScript 一样&#xff0c;Angular 也深度集成了 RxJS。 服务、表单、事件、全局状…

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

Cookie与Session详解与应用

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:青山一道同云雨&#xff0c;明月何曾是两乡&#x1f439; 目录 Cookie和Session 伪造Cookie 获取Cookie数据 传统方法获取Cookie​编辑 使用注解获取Cookie 设…

【CXL协议-性能注意事项(13)】

13.0 Performance Considerations CXL 为加速器访问系统提供了低延迟、高带宽的路径。CXL 的性能取决于多种因素。表 13-1 列出了 CXL 的主要性能属性。 1.实现的带宽取决于协议和有效载荷大小。CXL.cache 和 CXL.mem 的效率预计为 60-90%。效率与 CXL.io 上的 PCIe* 类似 一…

Git的多人协作模式与企业级开发模型

目录 多人协作一 1.要完成的任务 2.准备操作 3.用户的开发操作 4.merge操作 多人协作二 1.要完成的任务 2.用户的开发操作 3.merge操作 4.解决远程分⽀删除后&#xff0c;本地git branch -a 依然能看到的问题 企业级开发模型 1.了解一些常识 2.系统开发环境…

(Golang)初识Go语言!!为什么选择Go?如何配置Go的开发环境?VS Code如何配置Go环境?

1. Go能做什么&#xff1f; go的优点&#xff1a;运行速度快、并发能力强 Go的应用领域&#xff1a; 区块链应用&#xff08;BT、分布式账本技术&#xff09; 后端服务应用 例如&#xff1a; 美团后台流量支撑程序 支撑主站的后台流量&#xff08;排序、推荐、搜索等&#xf…