由于我的Java基础不是很好,加上很少写代码,所以最近在写http接口测试的过程中,遇到了一些传参的问题,调试了很久。在此把有结论的传参类型记录一下,便于后续回顾。
一:固定类型的参数传入
刚开始的时候,我把下面的【0:2】当做一个Map类型去处理的,代码如下:
Map<String, String> invoiceType = new HashMap<>();
invoiceType.put("0", "2");
List<Map<String, String>> invoiceTypeList = new ArrayList<>();
invoiceTypeList.add(invoiceType);
但是调试的时候发现仍是报400错误,才意识到【2】是一个固定的类型,传String即可,0只是一个默认的排序,可以忽略不处理的 ,所以修改了一下代码如下:
String invoiceType = "2";
List<String> invoiceTypeList = new ArrayList<>();
invoiceTypeList.add(invoiceType);
然后就调试成功啦。
二:参数是多个list
参数如下:
要把各个list拆分,分别传参:
//先定义一个Map类型的参数params
Map<String, Object> params = new HashMap<>();
//定义params参数下的accountDocument参数类型
Map<String, Object> accountDocument = new HashMap<>();
//给accountDocument传参
accountDocument.put("accountSetId", "182");
...
//定义params参数下的entryDtoList参数类型
List<Map<String, Object>> entryDtoList = new ArrayList<>();
//定义entryDtoList参数下的第一个参数,即参数0
Map<String, Object> entryDto1 = new HashMap<>();
//定义参数0下的参数:
entryDto1.put("unit", null);
entryDto1.put("fcurCode", null);
Map<String, String> accountEntry1 = new HashMap<>();
//根据每层定义的参数分别传参,一层一层嵌套即可
entryDto1.put("accountEntry", accountEntry1);
entryDtoList.add(entryDto1);
//定义entryDtoList参数下的第二个参数,即参数1
Map<String, Object> entryDto2 = new HashMap<>();
entryDto2.put("unit", null);
entryDto2.put("fcurCode", null);
Map<String, String> accountEntry2 = new HashMap<>();
//根据每层定义的参数分别传参,一层一层嵌套即可
entryDto2.put("accountEntry", accountEntry2);
entryDtoList.add(entryDto2);
//最后把entryDtoList参数传回到params参数中,完成传参
params.put("entryDtoList", entryDtoList);
表单类型的参数Form
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("remark", "测试");
感想
在http接口中传参,有两个要点。
1.搞清楚要传入参数的类型
目前主要用到的类型是:String/Object/Map/List
Map传值:Map<String,String>、Map<String,Object>
List传值:List<String>、List<Map<String, String>>
2.分清参数的层次,逐层传参
详见【二:参数是多个list】