浏览代码

支持将请求参数存入一个变量中

mxd 4 年之前
父节点
当前提交
0a20958bd7

+ 2 - 0
src/main/java/org/ssssssss/magicapi/config/ApiInfo.java

@@ -9,6 +9,8 @@ import java.util.Map;
  */
 public class ApiInfo {
 
+	public static final String WRAP_REQUEST_PARAMETER = "wrap_request_parameter";
+
 	/**
 	 * 接口ID
 	 */

+ 10 - 6
src/main/java/org/ssssssss/magicapi/config/RequestHandler.java

@@ -1,5 +1,6 @@
 package org.ssssssss.magicapi.config;
 
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.MediaType;
@@ -7,7 +8,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.server.ServletServerHttpRequest;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.ssssssss.magicapi.context.CookieContext;
@@ -85,12 +85,16 @@ public class RequestHandler {
 			RequestContext.setRequestAttribute(request, response);
 			//	找到对应的接口信息
 			info = MappingHandlerMapping.getMappingApiInfo(request);
-			if(info==null){
+			if (info == null) {
 				logger.error("接口不存在");
-				return resultProvider.buildResult(1001,"fail","接口不存在");
+				return resultProvider.buildResult(1001, "fail", "接口不存在");
 			}
 			// 构建脚本上下文
 			MagicScriptContext context = new MagicScriptContext();
+			Object wrap = info.getOptionValue(ApiInfo.WRAP_REQUEST_PARAMETER);
+			if (wrap != null && StringUtils.isNotBlank(wrap.toString())) {
+				context.set(wrap.toString(), parameters);
+			}
 			context.putMapIntoContext(parameters);
 			context.putMapIntoContext(pathVariables);
 			context.set("cookie", new CookieContext(request));
@@ -101,8 +105,8 @@ public class RequestHandler {
 				MediaType mediaType = MediaType.valueOf(request.getContentType());
 				Class clazz = Map.class;
 				for (HttpMessageConverter<?> converter : httpMessageConverters) {
-					if(converter.canRead(clazz,mediaType)){
-						context.set("body", converter.read(clazz,new ServletServerHttpRequest(request)));
+					if (converter.canRead(clazz, mediaType)) {
+						context.set("body", converter.read(clazz, new ServletServerHttpRequest(request)));
 						break;
 					}
 				}
@@ -125,7 +129,7 @@ public class RequestHandler {
 					return target;
 				}
 			}
-			if(value instanceof ResponseEntity){
+			if (value instanceof ResponseEntity) {
 				return value;
 			}
 			return resultProvider.buildResult(value);

+ 23 - 9
src/main/java/org/ssssssss/magicapi/config/WebUIController.java

@@ -191,9 +191,9 @@ public class WebUIController {
 	/**
 	 * debug 恢复断点
 	 *
-	 * @param id sessionId
+	 * @param id          sessionId
 	 * @param breakpoints 断点
-	 * @param step 是否是单步
+	 * @param step        是否是单步
 	 */
 	@RequestMapping("/continue")
 	@ResponseBody
@@ -281,7 +281,19 @@ public class WebUIController {
 			Object sessionId = request.remove("sessionId");
 			MagicScriptDebugContext context = new MagicScriptDebugContext();
 			try {
-				context.putMapIntoContext((Map<String, Object>) request.get("request"));
+				Object options = request.remove("options");
+				Map<String, Object> requestMap = (Map<String, Object>) request.get("request");
+				if (options != null) {
+					if (!(options instanceof Map)) {
+						return new JsonBean<>(0, "接口选项必须定义为map类型");
+					}
+					Map<String, Object> objectMap = (Map<String, Object>) options;
+					Object wrap = objectMap.get(ApiInfo.WRAP_REQUEST_PARAMETER);
+					if (wrap != null && StringUtils.isNotBlank(wrap.toString())) {
+						context.set(wrap.toString(), requestMap);
+					}
+				}
+				context.putMapIntoContext(requestMap);
 				context.putMapIntoContext((Map<String, Object>) request.get("path"));
 				context.set("cookie", request.get("cookie"));
 				context.set("session", request.get("session"));
@@ -388,7 +400,7 @@ public class WebUIController {
 	/**
 	 * 查询接口详情
 	 *
-	 * @param id      接口ID
+	 * @param id 接口ID
 	 */
 	@RequestMapping("/get")
 	@ResponseBody
@@ -406,7 +418,8 @@ public class WebUIController {
 
 	/**
 	 * 查询历史记录
-	 * @param id	接口ID
+	 *
+	 * @param id 接口ID
 	 */
 	@RequestMapping("/backups")
 	@ResponseBody
@@ -416,8 +429,9 @@ public class WebUIController {
 
 	/**
 	 * 获取历史记录
-	 * @param id	接口ID
-	 * @param timestamp	时间点
+	 *
+	 * @param id        接口ID
+	 * @param timestamp 时间点
 	 */
 	@RequestMapping("/backup/get")
 	@ResponseBody
@@ -428,7 +442,7 @@ public class WebUIController {
 	/**
 	 * 保存接口
 	 *
-	 * @param info    接口信息
+	 * @param info 接口信息
 	 */
 	@RequestMapping("/save")
 	@ResponseBody
@@ -455,7 +469,7 @@ public class WebUIController {
 			if (StringUtils.isBlank(info.getScript())) {
 				return new JsonBean<>(0, "脚本内容不能为空");
 			}
-			if(mappingHandlerMapping.hasRegisterMapping(info)){
+			if (mappingHandlerMapping.hasRegisterMapping(info)) {
 				return new JsonBean<>(0, "该路径已被映射,请换一个请求方法或路径");
 			}
 			if (StringUtils.isBlank(info.getId())) {

+ 15 - 0
src/main/resources/magicapi-support/js/index.js

@@ -624,6 +624,20 @@ var MagicEditor = {
             _this.alert('运行测试','请求参数有误!');
             return;
         }
+        var options = _this.optionsEditor.getValue();
+        try{
+            options = JSON.parse(options);
+            if(typeof options != 'object'){
+                _this.setStatusBar('接口选项有误!');
+                _this.alert('运行测试','接口选项有误!');
+                return;
+            }
+        }catch(e){
+            _this.setStatusBar('接口选项有误!');
+            _this.alert('运行测试','接口选项有误!');
+            return;
+        }
+
         _this.setStatusBar('开始测试...');
         _this.createConsole(function(sessionId){
             _this.report('run');
@@ -631,6 +645,7 @@ var MagicEditor = {
             var breakpoints = _this.getBreakPoints();
             request.breakpoints = breakpoints;
             request.sessionId = sessionId;
+            request.options = options;
             _this.resetDebugContent();
             $('.button-run').addClass('disabled');
             $('.button-continue,.button-step-over').addClass('disabled');