Map 的List绑定赋值

本文通过一个具体的Java代码示例,详细解析了如何利用Map和List进行数据交互,特别是展示了当更新List时,Map中对应的值也会同步更新的现象。

这个问题纠结了好久,之前没有时间研究,今天弄得好像明白了点,分享大家。

代码是这样的:

public static void main(String[] args) {
        Map<String, Object> sendMap = new HashMap<String, Object>();
        
        sendMap.put("delList_", new ArrayList());
        
        List delList= (List) sendMap.get("delList_");
        
        delList.add("这是List的值还是Map的值呢?");
        
        System.out.println(sendMap.get("delList_"));
    }

输出的Map尽然有了这条数据:

下面是我的理解:

关键就在 List delList= (List) sendMap.get("delList_");这里,这里其实就已经把delList跟sendMap.get("delList_")绑定了,当delList改变Map对应的key也跟着改变。

所以最后Map中的值就是delList刚添加的值。

总之这里就是给Map赋值了,这个我得理解不知道对不对呢?求解。。。

 

转载于:https://www.cnblogs.com/baixiuhua/p/9182294.html

<think>好的,我现在需要帮助用户解决如何在Postman中发送包含列表或数组的表单数据绑定请求。用户之前已经询问过关于@ModelAttribute的使用,现在他们想了解如何处理集合类型的数据。首先,我需要回顾之前的对话和提供的引用内容,确保回答准确。 首先,用户提供的引用中有几个相关的代码示例。比如引用[1]和引用[2]提到了使用@RequestBody接收List类型的数据,但用户现在的问题是表单数据绑定,而表单通常使用application/x-www-form-urlencoded格式,而不是JSON。因此,我需要区分@ModelAttribute和@RequestBody的不同,确保用户不会混淆。 接下来,用户的问题是关于表单数据中的列表或数组。在之前的回答中,我提到了使用类似tags[0]=value1&tags[1]=value2的格式,但需要更详细地说明如何在Postman中配置。根据引用[3],用户已经了解Postman的基本使用,所以可以省略基础操作,直接进入参数设置步骤。 我需要考虑用户可能的误区,例如是否需要在参数名中使用索引,或者是否可以省略索引直接使用相同的参数名多次。在Spring MVC中,这两种方法都可以,但使用索引更明确,特别是当处理复杂对象时。例如,在嵌套对象的情况下,参数名可能需要形如products[0].name的结构。 同时,需要提醒用户注意后端控制器的接收方式。如果使用@ModelAttribute,后端需要有一个包含列表属性的对象,比如ProductList中的List<Product> products属性,如引用[2]所示。用户需要确保他们的控制器方法正确接收这些参数,并且属性名称匹配。 此外,用户可能会遇到常见问题,比如数据未绑定或类型转换错误。这时候需要给出排查建议,比如检查参数名称是否正确、Content-Type是否设置为application/x-www-form-urlencoded,以及是否有默认构造函数等。 最后,需要与用户之前的回答保持一致,例如对比@ModelAttribute和@RequestBody,强调表单数据与JSON数据的不同处理方式。确保用户清楚在哪种情况下使用哪种注解,避免混淆。 总结步骤应该是:1. 设置正确的Content-Type;2. 在Postman中使用索引或重复参数名;3. 提供后端代码示例;4. 常见问题排查。同时,生成相关问题以帮助用户深入理解。</think>#### 通过Postman发送包含List/Array的表单数据绑定指南 以下针对**表单格式** (`application/x-www-form-urlencoded`) 的数组/集合参数绑定场景,结合Spring MVC的`@ModelAttribute`特性进行完整说明: --- ### 一、后端控制器配置要点 #### 1. 简单数组接收 ```java @PostMapping("/tags") @ResponseBody public String updateTags(@ModelAttribute TagForm tagForm) { return "接收标签数量:" + tagForm.getTags().size(); } public class TagForm { private List<String> tags; // 或 String[] tags // 必须提供getter/setter } ``` #### 2. 对象集合接收(含嵌套对象) ```java public class OrderForm { private List<Product> products; // 嵌套对象集合 } @PostMapping("/order") @ResponseBody public String createOrder(@ModelAttribute OrderForm form) { return "首件商品名称:" + form.getProducts().get(0).getName(); } ``` --- ### 二、Postman参数设置规范 #### 场景1:简单字符串数组 **参数格式要求**(二选一): - **带索引格式**(推荐): ``` tags[0]=手机&tags[1]=电子产品&tags[2]=旗舰款 ``` - **重复参数名格式**: ``` tags=手机&tags=电子产品&tags=旗舰款 ``` **Postman操作步骤**: 1. 选择`POST`方法,设置URL 2. Headers添加`Content-Type: application/x-www-form-urlencoded` 3. Body选择`x-www-form-urlencoded`,按格式输入参数: ![带索引参数示例](https://via.placeholder.com/400x200?text=Postman+List+Param+Example) #### 场景2:对象集合参数 **参数格式规范**: ``` products[0].name=iPhone15&products[0].price=6999&products[1].name=AirPods&products[1].price=1299 ``` **关键细节**: - 索引必须从`0`开始连续编号 - 对象属性需完整匹配目标类的字段名 - 嵌套层级使用`.`连接符表示[^2] --- ### 三、特殊场景处理 #### 1. 接收List<Map>类型 ```java public class ConfigForm { private List<Map<String,String>> settings; } // Postman参数格式: settings[0].key=color&settings[0].value=blue settings[1].key=size&settings[1].value=XL ``` #### 2. 混合类型参数 ```java public class ComplexForm { private String[] ids; private List<User> operators; } // Postman参数示例: ids=1001&ids=1002 operators[0].name=张三&operators[0].role=admin operators[1].name=李四&operators[1].role=user ``` --- ### 四、故障排查指南 | 问题现象 | 检查方向 | 解决方案 | |------------------------|----------------------------------|---------------------------------| | 集合元素数量为0 | 参数命名是否符合`param[index]`格式 | 使用`-parameters`编译参数验证命名 | | 嵌套对象属性未赋值 | 是否缺少默认构造函数 | 为嵌套类添加无参构造函数 | | 收到`400 Bad Request` | 索引是否连续无跳跃 | 确保索引从0开始且无空缺 | | 数字类型转换失败 | 是否混用字符串和数值 | 统一参数数据类型 | --- ### 五、与JSON传参对比 | 特性 | 表单格式 | JSON格式[^5] | |----------------------|--------------------------------|-------------------------------| | 数据结构 | 扁平化层级 | 完整树形结构 | | 集合参数 | 需要索引标识 | 直接使用JSON数组 | | Content-Type | x-www-form-urlencoded | application/json | | 后端注解 | `@ModelAttribute` | `@RequestBody` | | 文件上传支持 | 可混合使用 | 需要额外处理 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值