java接口 controller层接收list集合传参,postman 调用接口时required parameter XXX is not present

开发过程中开发一个java接口 controller层接收list集合传参,然后postman调用一直不成功,报错

使用@RequestParam方式,如果postman 调用接口时报错required parameter XXX is not present
可能是(value=“items”)跟你输入参数时的key——items输入不一致,去掉(value=“items”)或者检查输入一样的值可解决此问题,详情可看下面的@RequestParam方式

一:java后端接口写法

下面是一个简单的例子,展示如何在Spring MVC的Controller中接收一个List类型的参数。

一,使用@RequestBody传参

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class MyController {@PostMapping("/processList")public String processList(@RequestBody List<String> items) {// 这里处理接收到的列表for (String item : items) {System.out.println("Received: " + item);}return "List processed successfully.";}
}
1,在这个例子中:

@RestController 注解表示这是一个RESTful风格的控制器。
@PostMapping(“/processList”) 表明该方法将处理发送到/processList路径的POST请求。
@RequestBody 注解告诉Spring框架将请求体中的内容转换为相应的Java类型,在这里是List类型。
客户端可以发送类似以下格式的JSON数据:

当客户端发送POST请求到/processList端点时,Spring会自动将请求体中的JSON数组转换成List对象,并将其传递给processList方法进行处理。

如果列表中的元素是复杂的对象而不是简单的字符串,您可以将String替换为您自己的类名,例如List,并且确保客户端发送的JSON数据与您的类结构相匹配。

2,使用postman请求,

设置请求头
点击“Headers”选项卡,添加一个新的键值对来指定Content-Type为application/json,这告诉服务器你发送的数据是JSON格式。

keyvalue
Content-Typeapplication/json

如下图:(Cookie设置是因为我的服务需要登录验证)
在这里插入图片描述

请求接口:
点击“Body”选项卡,并选择“raw”作为输入类型,然后选择“JSON (application/json)”作为子选项。在文本框中输入你要发送的JSON数据。
在这里插入图片描述

二,@RequestParam方式

1使用查询参数 (Query Parameters)

如果列表数据不是很大,可以考虑使用查询参数的方式发送。但是请注意,这种方法通常不适用于较大的列表数据。

在Postman中设置
请求类型:POST
URL:http://localhost:8080/processList
查询参数:在URL后面添加查询参数,例如:

http://localhost:8080/processList?items=item1&items=item2&items=item3

后端代码示例

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;@RestController
public class MyController {@GetMapping("/processList")public String processList(@RequestParam (value="items"List<String> items) {for (String item : items) {System.out.println("Received: " + item);}return "List processed successfully.";}
}
2. 使用表单数据 (Form Data)

可以使用表单数据的方式发送列表中的每一项作为一个单独的表单字段。
请求的时候 选择form-data选项,为每个列表项添加一个键值对:
键:items (多次添加,每次的值不同)
值:列表项的值:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;@RestController
public class MyController {@PostMapping("/processList")public String processList(@RequestParam List<String> items) {for (String item : items) {System.out.println("Received: " + item);}return "List processed successfully.";}
}

在这里插入图片描述

三,使用自定义对象

public class ItemList {private List<String> items;// Getter and Setterpublic List<String> getItems() {return items;}public void setItems(List<String> items) {this.items = items;}
}

在Postman中设置
请求类型:POST
URL:http://localhost:8080/processList
Body:选择raw,并选择JSON (application/json),然后输入:

{"items": ["item1", "item2", "item3"]
}

后端代码示例

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class MyController {@PostMapping("/processList")public String processList(@RequestBody ItemList itemList) {List<String> items = itemList.getItems();for (String item : items) {System.out.println("Received: " + item);}return "List processed successfully.";}
}

这些方法都可以根据实际需求选择使用。如果你的数据量较大或者数据格式比较复杂,推荐使用JSON对象的方式。而对于较小的数据集,可以考虑使用查询参数或表单数据。

二:java后端接口写法

使用JSP页面结合jQuery和Ajax来调用后端接口,下面是四种方法,对应后端几种调用方式

1. 使用JSON数组

这是最直接的方式,适合于发送JSON格式的数据。

HTML/JSP 页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Ajax Example</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="sendData">Send Data</button><script>$(document).ready(function () {$('#sendData').click(function () {var data = ['item1', 'item2', 'item3'];$.ajax({url: 'http://localhost:8080/processList',type: 'POST',contentType: 'application/json',data: JSON.stringify(data),success: function (response) {console.log('Success:', response);},error: function (error) {console.error('Error:', error);}});});});</script>
</body>
</html>

2. 使用查询参数

如果列表数据不是很大,可以通过查询参数发送。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Ajax Example</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="sendData">Send Data</button><script>$(document).ready(function () {$('#sendData').click(function () {var data = ['item1', 'item2', 'item3'];var query = data.map(item => `items=${encodeURIComponent(item)}`).join('&');$.ajax({url: `http://localhost:8080/processList?${query}`,type: 'GET',success: function (response) {console.log('Success:', response);},error: function (error) {console.error('Error:', error);}});});});</script>
</body>
</html>

3. 使用表单数据

可以模拟发送表单数据的方式发送列表数据。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Ajax Example</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="sendData">Send Data</button><script>$(document).ready(function () {$('#sendData').click(function () {var data = ['item1', 'item2', 'item3'];var formData = new FormData();data.forEach(item => {formData.append('items', item);});$.ajax({url: 'http://localhost:8080/processList',type: 'POST',data: formData,processData: false, // 不要让jQuery处理数据contentType: false, // 不要设置content-type请求头success: function (response) {console.log('Success:', response);},error: function (error) {console.error('Error:', error);}});});});</script>
</body>
</html>

4, 使用自定义对象

定义一个包含列表属性的对象,并发送整个对象。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Ajax Example</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><button id="sendData">Send Data</button><script>$(document).ready(function () {$('#sendData').click(function () {var data = {items: ['item1', 'item2', 'item3']};$.ajax({url: 'http://localhost:8080/processList',type: 'POST',contentType: 'application/json',data: JSON.stringify(data),success: function (response) {console.log('Success:', response);},error: function (error) {console.error('Error:', error);}});});});</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52540.shtml

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

相关文章

A Neural Probabilistic Language Model

摘要 统计语言建模的一个目标是学习单词序列的联合概率函数。由于维度的诅咒&#xff0c;这在本质上是困难的:我们建议用它自己的武器来对抗它。在提出的方法中&#xff0c;人们同时学习(1)每个单词的分布式表示&#xff08;词向量&#xff09;(即单词之间的相似性)以及(2)表示…

在进行网站链接时,‌加上http或https的重要性不言而喻

这一简单的操作背后&#xff0c;‌蕴含着对搜索引擎优化&#xff08;‌SEO&#xff09;‌的深刻理解&#xff0c;‌以及对网站权重提升的精准把握。‌以下&#xff0c;‌我们将深入探讨这一话题&#xff0c;‌以期为您的网站优化提供有价值的参考。‌优化&#xff08;‌SEO&…

C/C++控制台贪吃蛇游戏的实现

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 一、…

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件&#xff0c;不仅擅长构建交互式界面&#xff0c;更在数据可视化方面展现出了非凡的创意与实用性。今天&#xff0c;就让我们一起探索Axure设计的几款精美数据可视化大屏模板&#xff0c;感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…

银河麒麟桌面操作系统V10:如何设置应用开机自启动?

银河麒麟桌面操作系统V10&#xff1a;如何设置应用开机自启动&#xff1f; 1、图形界面设置2、命令行设置3、注意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、图形界面设置 打开“设置”->“系统”->“开机启动”。点击“添加…

5000套精美PPT免费分享

目录 部分展示目录 几乎包含各种应用场景的PPT模板 这里只展示部分目录 部分展示目录 ##PPT下载 链接&#xff1a;https://pan.baidu.com/s/1ckvN9xeMR82hL30lHXfJ0g 提取码&#xff1a;ZYNB 点击下载&#xff0c;记得点个赞哦

ELK进阶-安全认证设置流程介绍

目录 一、前言 二、ElasticSearch的安全认证配置 设置ElasticSearch的安全认证功能&#xff08;最低&#xff09; 启用TLS/SSL加密通信 &#xff08;1&#xff09;生成CA证书 &#xff08;2&#xff09;生成transport证书 &#xff08;3&#xff09;生成http证书 &#…

docker镜像,ip,端口映射,持久化

docker 镜像的迁移&#xff1a;导出和导入镜像 查看镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 years ago 231MB 打包 将镜像打包&#xff0c;找到save,可以将…

【非常困难】 猿人学web第一届 第10题 js 混淆 - 重放攻击对抗

文章目录 调试干扰第一个 debuggerHook 代码 第二个 debuggerHook 代码 第三个 Function.constructor.prototype 检测Hook 代码 完整的 Hook 代码 接口分析加密参数 m 生成位置加密参数还原加密点扣代码提示_yrxyA\$()var _yrxmEu _yrxWKg(_yrxyHJ...._yrxWKg() let result _…

半枚玄月照见人间空荡荡

半枚玄月照见人间空荡荡 昨夜玄月昨夜风&#xff0c;轻吹往事落心中。 众里寻他为何事&#xff1f;鸡鸣月落一场空。玄月 沙发上刷短视频笑得不经意抬头&#xff0c;忽而瞥见窗口防盗网挂着半枚月亮&#xff0c;玄黄色的&#xff0c;温润而冷冽&#xff0c;引人注目。 手机里…

国货之光|暴雨机推出面向大模型训练的AI服务器

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;尤其是以ChatGPT为代表的多模态AI大模型&#xff0c;‌其参数规模和训练数据量均达到了前所未有的规模。‌GPT-3.5、‌GPT-4等模型的参数规模突破了万亿级别&#xff0c;‌训练数据量达到了TB级别&#xff0c;‌这…

zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题 1、封装API2、有账号密码3、查询所有有效的具体数据&#xff0c;也就是缓存的所有字段 封装查询所有有效具体数据的方法 基本封装 def get_all(self, is_activeTrue, limit100000):"""遍历数据库中所有的key&#xff0c;默认查询所有没过期的:para…

51单片机——LED灯控制

1、LED介绍 中文名&#xff1a;发光二极管 外文名&#xff1a;Light Emitting Diode 简称&#xff1a;LED 用途&#xff1a;照明、广告灯、指引灯、屏幕 2、LED原理图 电阻在原理图上标注为1k&#xff0c;表示这是1千欧的电阻&#xff0c;实际在电路板上的表示是102 102解…

Godot《躲避小兵》实战之创建游戏主场景

游戏主场景 现在是时候将我们所做的一切整合到一个可玩的游戏场景中了。 创建新场景并添加一个 Node节点&#xff0c;命名为 Main。&#xff08;我们之所以使用 Node 而不是 Node2D&#xff0c;是因为这个节点会作为处理游戏逻辑的容器使用。本身是不需要 2D 功能的。&#x…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

oneapi 获取通义千问模型密钥

1、打开 阿里云百炼大模型平台&#xff0c;点击开通&#xff0c;登录账号 2、获取密钥 3、查看模型名称&#xff0c;可以添加到 oneapi 的渠道中 别忘了添加向量模型

python库(21):

1 TextBlob简介 TextBlob 是一个基于 Python 的文本处理库&#xff0c;能够让基础的自然语言处理任务变得异常简单。 它提供了一个简单直观的 API&#xff0c;让你能够轻松执行词性标注、名词短语提取、情感分析、文本分类和关键词提取等功能。 值得一提的是&#xff0c;Tex…

[Linux]如何在虚拟机安装Ubuntu?(小白向)

一、我们为什么要在虚拟机中安装Ubuntu? 在虚拟机中安装系统主要是为了让一个系统与我们原本的系统隔离&#xff0c;不管是想运行一些不安全的软件&#xff0c;或者是想运行一些独特的操作系统&#xff0c;我们都可以选择使用虚拟机来安装和隔离这些操作系统。如果你是一位Lin…

跨越语言障碍:2024四款实用在线翻译工具评测!

随着技术的不断进步&#xff0c;各种在线翻译工具层出不穷&#xff0c;帮助我们轻松跨越语言的鸿沟。今天&#xff0c;让我们一起探索几款非常实用的在线翻译工具&#xff01; 福昕在线翻译 直达链接&#xff1a; https://fanyi.pdf365.cn/ 福昕在线翻译是一款专注于文档翻…

【C++】函数模板特化:深度解析与应用场景

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…