|
@@ -2,6 +2,7 @@ package org.ssssssss.magicapi.controller;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -113,21 +114,23 @@ public class RequestHandler extends MagicController {
|
|
|
if (context.get(VAR_NAME_REQUEST_BODY) != null && StringUtils.isNotBlank(requestEntity.getApiInfo().getRequestBody()) && JsonUtils.readValue(requestEntity.getApiInfo().getRequestBody(), BaseDefinition.class).getChildren().size() > 0) {
|
|
|
// 验证 body
|
|
|
BaseDefinition body = JsonUtils.readValue(requestEntity.getApiInfo().getRequestBody(), BaseDefinition.class);
|
|
|
+ Object bodyValue = ObjectUtils.clone(context.get(VAR_NAME_REQUEST_BODY));
|
|
|
+
|
|
|
// 请求体首层是数组的时候单独处理
|
|
|
- if (context.get(VAR_NAME_REQUEST_BODY) instanceof List) {
|
|
|
+ if (bodyValue instanceof List) {
|
|
|
if (!VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY.equalsIgnoreCase(body.getDataType().getJavascriptType())) {
|
|
|
Object result = resultProvider.buildResult(requestEntity, RESPONSE_CODE_INVALID, String.format("body参数错误,应为[%s]", body.getDataType().getJavascriptType()));
|
|
|
return requestEntity.isRequestedFromTest() ? new JsonBean<>(BODY_INVALID, result) : result;
|
|
|
}
|
|
|
|
|
|
- for (Object objMap : (List)context.get(VAR_NAME_REQUEST_BODY)) {
|
|
|
- value = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, body.getChildren().get(0).getChildren(), (Map)objMap);
|
|
|
+ for (Map valueMap : (List<Map>)bodyValue) {
|
|
|
+ value = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, body.getChildren().get(0).getChildren(), ObjectUtils.clone(valueMap));
|
|
|
if (value != null) {
|
|
|
return requestEntity.isRequestedFromTest() ? new JsonBean<>(BODY_INVALID, value) : value;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- value = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, body.getChildren(), (Map)context.get(VAR_NAME_REQUEST_BODY));
|
|
|
+ value = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, body.getChildren(), (Map)bodyValue);
|
|
|
if (value != null) {
|
|
|
return requestEntity.isRequestedFromTest() ? new JsonBean<>(BODY_INVALID, value) : value;
|
|
|
}
|
|
@@ -159,14 +162,22 @@ public class RequestHandler extends MagicController {
|
|
|
|
|
|
// 针对requestBody多层级的情况
|
|
|
if (VAR_NAME_REQUEST_BODY_VALUE_TYPE_OBJECT.equalsIgnoreCase(parameter.getDataType().getJavascriptType())) {
|
|
|
- Object result = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, parameter.getChildren(), (Map)parameters.get(parameter.getName()));
|
|
|
+ Map map = (Map)parameters.get(parameter.getName());
|
|
|
+ Object result = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, parameter.getChildren(), map);
|
|
|
if (result != null) {
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
if (VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY.equalsIgnoreCase(parameter.getDataType().getJavascriptType())) {
|
|
|
- for (Object objMap : (List)parameters.get(parameter.getName())) {
|
|
|
- Object result = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, parameter.getChildren().get(0).getChildren(), (Map)objMap);
|
|
|
+ if (parameters == null || parameters.get(parameter.getName()) == null) {
|
|
|
+ return resultProvider.buildResult(requestEntity, RESPONSE_CODE_INVALID, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]为必填项", comment, parameter.getName())));
|
|
|
+ }
|
|
|
+ if (!(parameters.get(parameter.getName()) instanceof List)) {
|
|
|
+ return resultProvider.buildResult(requestEntity, RESPONSE_CODE_INVALID, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]数据类型错误", comment, parameter.getName())));
|
|
|
+ }
|
|
|
+ for (Map valueMap : (List<Map>)parameters.get(parameter.getName())) {
|
|
|
+ Object result = doValidate(requestEntity, VAR_NAME_REQUEST_BODY, parameter.getChildren().get(0).getChildren(), ObjectUtils.clone(valueMap));
|
|
|
if (result != null) {
|
|
|
return result;
|
|
|
}
|