解析目标
- 使用 分号(:或:) 分隔参数名和参数值;
- 使用换行符(\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();
}
}