Ver Fonte

路径变量验证

mxd há 4 anos atrás
pai
commit
1816244f37

+ 24 - 17
src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java

@@ -94,6 +94,11 @@ public class RequestHandler extends MagicController {
 		if (value != null) {
 			return requestEntity.isRequestedFromTest() ? new JsonBean<>(HEADER_INVALID, value) : value;
 		}
+		// 验证 path
+		value = doValidate(requestEntity, "path", requestEntity.getApiInfo().getPaths(), requestEntity.getPathVariables());
+		if (value != null) {
+			return requestEntity.isRequestedFromTest() ? new JsonBean<>(PATH_VARIABLE_INVALID, value) : value;
+		}
 		MagicScriptContext context = createMagicScriptContext(requestEntity);
 		requestEntity.setMagicScriptContext(context);
 		// 执行前置拦截器
@@ -116,26 +121,28 @@ public class RequestHandler extends MagicController {
 
 	private <T extends BaseDefinition> Object doValidate(RequestEntity requestEntity, String comment, List<T> validateParameters, Map<String, Object> parameters) {
 		for (BaseDefinition parameter : validateParameters) {
-			String requestValue = StringUtils.defaultIfBlank(Objects.toString(parameters.get(parameter.getName()), EMPTY), Objects.toString(parameter.getDefaultValue(), EMPTY));
-			if (StringUtils.isBlank(requestValue)) {
-				if (!parameter.isRequired()) {
-					continue;
-				}
-				return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]为必填项", comment, parameter.getName())));
-			}
-			try {
-				Object value = convertValue(parameter.getDataType(), parameter.getName(), requestValue);
-				String validateType = parameter.getValidateType();
-				if (VALIDATE_TYPE_PATTERN.equals(validateType)) {    // 正则验证
-					String expression = parameter.getExpression();
-					if (StringUtils.isNotBlank(expression) && !PatternUtils.match(Objects.toString(value, EMPTY), expression)) {
-						return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]不满足正则表达式", comment, parameter.getName())));
+			if (StringUtils.isNotBlank(parameter.getName())) {
+				String requestValue = StringUtils.defaultIfBlank(Objects.toString(parameters.get(parameter.getName()), EMPTY), Objects.toString(parameter.getDefaultValue(), EMPTY));
+				if (StringUtils.isBlank(requestValue)) {
+					if (!parameter.isRequired()) {
+						continue;
 					}
+					return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]为必填项", comment, parameter.getName())));
 				}
-				parameters.put(parameter.getName(), value);
+				try {
+					Object value = convertValue(parameter.getDataType(), parameter.getName(), requestValue);
+					String validateType = parameter.getValidateType();
+					if (VALIDATE_TYPE_PATTERN.equals(validateType)) {    // 正则验证
+						String expression = parameter.getExpression();
+						if (StringUtils.isNotBlank(expression) && !PatternUtils.match(Objects.toString(value, EMPTY), expression)) {
+							return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]不满足正则表达式", comment, parameter.getName())));
+						}
+					}
+					parameters.put(parameter.getName(), value);
 
-			} catch (Exception e) {
-				return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]不合法", comment, parameter.getName())));
+				} catch (Exception e) {
+					return resultProvider.buildResult(requestEntity, 0, StringUtils.defaultIfBlank(parameter.getError(), String.format("%s[%s]不合法", comment, parameter.getName())));
+				}
 			}
 		}
 		// 取出表达式验证的参数

+ 13 - 0
src/main/java/org/ssssssss/magicapi/model/ApiInfo.java

@@ -42,6 +42,11 @@ public class ApiInfo extends MagicEntity{
 	 */
 	private List<Header> headers = Collections.emptyList();
 
+	/**
+	 * 路径变量
+	 */
+	private List<Path> paths = Collections.emptyList();
+
 	/**
 	 * 输出结果
 	 */
@@ -122,6 +127,14 @@ public class ApiInfo extends MagicEntity{
 		this.responseBody = responseBody;
 	}
 
+	public List<Path> getPaths() {
+		return paths;
+	}
+
+	public void setPaths(List<Path> paths) {
+		this.paths = paths;
+	}
+
 	public Map<String, Object> getOptionMap() {
 		Map<String, Object> map = new HashMap<>();
 		if (this.jsonNode == null) {

+ 2 - 0
src/main/java/org/ssssssss/magicapi/model/JsonCodeConstants.java

@@ -52,6 +52,8 @@ public interface JsonCodeConstants {
 
 	JsonCode HEADER_INVALID = new JsonCode(0, "header验证失败");
 
+	JsonCode PATH_VARIABLE_INVALID = new JsonCode(0, "路径变量验证失败");
+
 	JsonCode FILE_IS_REQUIRED = new JsonCode(0, "请上传文件");
 
 	JsonCode UPLOAD_PATH_CONFLICT = new JsonCode(0, "上传后%s路径会有冲突,请检查");

+ 16 - 0
src/main/java/org/ssssssss/magicapi/model/Path.java

@@ -0,0 +1,16 @@
+package org.ssssssss.magicapi.model;
+
+public class Path extends BaseDefinition{
+
+	public Path() {
+	}
+
+	public Path(String name, String value) {
+		super(name, value);
+	}
+
+	@Override
+	public boolean isRequired() {
+		return true;
+	}
+}