解析目标
- 使用 分号(:或:) 分隔参数名和参数值;
- 使用换行符(\n)来区分上下键值对(参数名:参数值);
- 参数值中,是可以包含 分隔符(:或:)和换行符(\n);
1、参数解析器文件:ParamParser.java
package com.ddd.application.service.extend; import cn.hutool.core.text.StrSplitter; import cn.hutool.core.util.StrUtil; import com.ddd.common.helper.EmptyHelper; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; import java.util.Map; import static com.ddd.application.config.TaskFieldsConfig.fieldList; /** * 参数解析器 */ @Component public class ParamParser { /** * 参数解析 * * @param paramStr 参数字符串 */ public List<Map<String, Object>> parse(String paramStr) { List<String> lineList = StrUtil.split(paramStr, "\n"); Map<String, Object> taskParams = EmptyHelper.emptyLinkedHashMap(); Map<String, Object> apiParams = EmptyHelper.emptyLinkedHashMap(); String separator = "[:|:]"; String key = ""; String value = ""; boolean _isKey = false; String _key = ""; String _value = ""; for (String line : lineList) { List<String> keyValue = StrSplitter.splitByRegex(line, separator, 2, false, false); if (keyValue.size() >= 2) { _key = keyValue.get(0).trim(); _value = keyValue.get(1); } else { _key = ""; _value = ""; } // 注意:不为空的值,才是有效的Key if (StrUtil.isNotEmpty(_key)) { _isKey = true; } else { _isKey = false; } if (_isKey) { // 保存上一次计算的“键值对“ if (StrUtil.isNotEmpty(key)) { if (fieldList.contains(key)) { taskParams.put(key, value); } else { apiParams.put(key, value); } } key = _key; value = _value; } else { value += "\n" + line; } } // 保存最后一次计算的“键值对“ if (StrUtil.isNotEmpty(key)) { if (fieldList.contains(key)) { taskParams.put(key, value); } else { apiParams.put(key, value); } } return Arrays.asList(taskParams, apiParams); } }
2、测试文件:Albert_Test_01.java
package com.ddd; import cn.hutool.core.text.StrSplitter; import com.ddd.application.service.extend.ParamParser; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; import java.util.Map; @SpringBootTest() public class Albert_Test_01 { @Resource private ParamParser paramParser; @Test void test_01() { // 解析请求参数 String paramStr = """ 任务ID:f5zvdnish1ggx 任务发起对象:DDD客服小助手 在Java的String对象中提供了 split方法用于通过 任务总步骤数:20 任务输出文本:xxyyzz 任务当前步骤:3 ===================== 任务异常信息:test 任务状态:已完成 wenjianbao 请求ID: XX003 请求URL: https://php-note.com 请求内容: xxx:123, yyy:456 """; List<Map<String, Object>> paramList = paramParser.parse(paramStr); System.out.println(paramList); } /** * 测试 StrSplitter.splitByRegex() 方法 */ @Test void test_02() { String separator = "[:|:]"; String line = """ :20 任务输出文本:xxyyzz 温建宝 """; List<String> keyValue = StrSplitter.splitByRegex(line, separator, 2, false, false); System.out.println(keyValue.size()); System.out.println(keyValue); } }
输出内容:
[{任务ID=f5zvdnish1ggx, 任务发起对象=DDD客服小助手 在Java的String对象中提供了 split方法用于通过, 任务总步骤数=20, 任务输出文本=xxyyzz, 任务当前步骤=3 =====================, 任务异常信息=test, 任务状态=已完成 wenjianbao }, {请求ID= XX003, 请求URL= https://php-note.com, 请求内容= xxx:123, yyy:456 }]
3、任务表字段文件:TaskFieldsConfig.java
package com.ddd.application.config; import java.util.ArrayList; /** * 任务字段 */ public class TaskFieldsConfig { public static ArrayList<String> fieldList = new ArrayList<>(); static { fieldList.add("任务ID"); fieldList.add("任务名称"); fieldList.add("任务发起对象"); fieldList.add("任务执行接口"); fieldList.add("任务接口授权ID"); fieldList.add("任务输入文本"); fieldList.add("任务输入附件"); fieldList.add("任务输出文本"); fieldList.add("任务输出附件"); fieldList.add("任务总步骤数"); fieldList.add("任务当前步骤"); fieldList.add("任务状态"); fieldList.add("任务异常信息"); fieldList.add("任务开始时间"); fieldList.add("任务结束时间"); } }
4、控制器文件:TaskController
package com.ddd.application.controller; import com.ddd.application.config.UrlConfig; import com.ddd.application.service.extend.ParamParser; import com.ddd.common.model.Result; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; @RestController public class TaskController { @Resource private ParamParser paramParser; /** * 添加任务 */ @PostMapping(UrlConfig.task_add) public Result<Object> addTask() { return Result.ok(); } /** * 更新任务 */ @PostMapping(UrlConfig.task_update) public Result<Object> updateTask() { return Result.ok(); } /** * 更新任务状态 */ @PostMapping(UrlConfig.task_updateStatus) public Result<Object> updateTaskStatus() { return Result.ok(); } /** * 删除任务 */ @PostMapping(UrlConfig.task_delete) public Result<Object> deleteTask() { return Result.ok(); } /** * 获取任务详情 */ @PostMapping(UrlConfig.task_info) public Result<Object> getTaskInfo() { return Result.ok(); } /** * 获取任务状态 */ @ResponseBody @PostMapping(UrlConfig.task_status) public Result<Object> getTaskStatus(@RequestBody String requestBody) { List<Map<String, Object>> params = paramParser.parse(requestBody); System.out.println(params); return Result.ok(); } }