记一次通过json参数化做复杂参数接口自动化过程
请求参数如下
这种复杂的参数体,最好通过将每个字段拆分成不同的子请求体,然后在请求的时候进行组装,上图的每个字段都可以单独拆分出来一个请求,最后可以拼接出不同的业务流程。
先将请求json放置到本地,将需要参数化的值使用${}声明为一个变量
引入需要的jar包
<!-- yaml文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
<!-- csv文件解析-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
</dependency>
通过Jackson typereference 泛型读取相关文件
读取json文件并替换变量
// 活动名称
public static HashMap<String,Object> getActivityName(String activityName){
MapperUtil<HashMap<String,Object>> mapperUtil = new MapperUtil<>();
HashMap<String, Object> activityNameMap = mapperUtil.getReadValue(
"src/main/resources/data/basic-parameter/activityName.json");
log.info("读取的活动名称相关json"+activityNameMap);
HashMap<String, Object> newActivityName = new HashMap<>();
activityNameMap.forEach((
(s, o) -> { // 遍历value以 { 和} 结尾的值
log.info("未转换前" + o);
if (Objects.nonNull(o)) {
String value = o.toString();
if (value.startsWith("${") && value.endsWith("}")) { //获取到的结果为: ${activityName}
String value1 = StringUtils.stripStart(value, "${"); // 去掉${--> activityName}
String value2 = StringUtils.stripEnd(value1, "}"); // 去掉} -->activityName
if ("activityName".equals(value2)) {
o = activityName;
}
}
}
newActivityName.put(s, o);
}
));
log.info("遍历后"+activityNameMap);
return newActivityName;
}
因为json中有值为null的参数,使用fastjson转换时,需要加 WriteMapNullValue
String jsonString = JSONObject.toJSONString(bodyDepart, WriteMapNullValue);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统