소스 검색

update 增加统一返回值使用map

GITZYY 7 달 전
부모
커밋
e7116cfc84
14개의 변경된 파일75개의 추가작업 그리고 87개의 파일을 삭제
  1. 3 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/ApiResult.java
  2. 2 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/FunctionObject.java
  3. 3 4
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/HttpApi.java
  4. 2 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/ValueObject.java
  5. 0 56
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/payload/ApiJsonPayloadResolver.java
  6. 5 3
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiJsonResultResolver.java
  7. 3 2
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiResultResolver.java
  8. 1 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiResultResolverManage.java
  9. 10 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/BasicTypeValueObjectResolver.java
  10. 20 13
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/SpelValueObjectResolver.java
  11. 4 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/ValueObjectResolver.java
  12. 1 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/ValueObjectResolverManager.java
  13. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/business/GenerateHttpApiConfigService.java
  14. 20 1
      start/src/test/java/StartTest.java

+ 3 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/ApiResult.java

@@ -5,6 +5,8 @@ import lombok.Getter;
 import lombok.experimental.Accessors;
 import org.springframework.expression.spel.support.StandardEvaluationContext;
 
+import java.util.Map;
+
 /**
  * @author zhangyy
  * @version 1.0
@@ -18,7 +20,7 @@ public class ApiResult {
     /**
      * 入参
      */
-    private final JSONObject output;
+    private final Map<String,Object> output;
     /**
      * spel context
      */

+ 2 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/FunctionObject.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author: bianlanzhou
@@ -37,7 +38,7 @@ public class FunctionObject implements Serializable {
         return ValueObjectFunctionManager.getInstance().apply(code,functionParam);
     }
 
-    public Object apply(Object value,ApiResult apiContext){
+    public Object apply(Object value, Map<String,Object> apiContext){
         FunctionParam functionParam = new FunctionParam().setInput(value);
         for(ValueObject arg : args){
             functionParam.getExtArg().add(ValueObjectResolverManager.getInstance().resolve(arg,apiContext));

+ 3 - 4
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/HttpApi.java

@@ -100,9 +100,8 @@ public class HttpApi implements Api {
      */
     public Object loadResult(HttpApiConfig config,Object output){
         this.httpApiConfig = config;
-         JSONObject res = JSON.parseObject(output.toString());
-        ApiResult context = new ApiResult(res);
-         return doLoadResult(context);
+         Map<String,Object> params =JSONObject.parseObject(output.toString(),Map.class);
+         return doLoadResult(params);
     }
 
 
@@ -156,7 +155,7 @@ public class HttpApi implements Api {
      * @author zhangyy
      * @date: 2024/9/2 16:01
      */
-    private Object doLoadResult(ApiResult output) {
+    private Object doLoadResult(Map<String,Object> output) {
 
         try {
             //判断是否存在这个返回信息的配置

+ 2 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/ValueObject.java

@@ -11,6 +11,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author: bianlanzhou
@@ -62,7 +63,7 @@ public class ValueObject implements Serializable {
     }
 
 
-    public ValueObject compile(ApiResult apiContext){
+    public ValueObject compile(Map<String,Object> apiContext){
         this.realValue = ValueObjectResolverManager.getInstance().resolve(this,apiContext);
         if(CollectionUtils.isEmpty(functions)){
             return this;

+ 0 - 56
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/payload/ApiJsonPayloadResolver.java

@@ -37,42 +37,6 @@ public class ApiJsonPayloadResolver implements ApiPayloadResolver {
 
 
 
-    /**
-     * 遍历json
-     * @param jsonElement json元素
-     * @param context 上下文
-     * @param deep 深度
-     */
-    public void traverseJson(JsonElement jsonElement, JsonElement currentElement,String currentKey,ApiResult context,Integer deep) {
-        deep++;
-        if(deep >= MAX_DEEP){
-            throw new BizException(String.format("请求payload的json配置深度达到允许的最大深度[%s]!",MAX_DEEP));
-        }
-        if (jsonElement.isJsonObject()) {
-            JsonObject jsonObject = jsonElement.getAsJsonObject();
-            for (String key : jsonObject.keySet()) {
-                traverseJson(jsonObject.get(key),jsonObject,key,context,deep);
-            }
-        } else if (jsonElement.isJsonArray()) {
-            JsonArray jsonArray = jsonElement.getAsJsonArray();
-            for (JsonElement elem : jsonArray) {
-                traverseJson(elem,currentElement,null,context,deep);
-            }
-        } else {
-            if(jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isString()){
-                String value = jsonElement.getAsString();
-                if(value.startsWith(CONFIG_PREFIX_SIGN)&&value.endsWith(CONFIG_END_SIGN)){
-                    JsonPrimitive newElement = parseSpelConfigToRealValue(jsonElement,context);
-                    if(StringUtils.isNotBlank(currentKey)){
-                        currentElement.getAsJsonObject().add(currentKey,newElement);
-                    }
-                }
-            }
-        }
-    }
-
-
-
     /**
      * 遍历json
      * @param jsonElement json元素
@@ -107,26 +71,6 @@ public class ApiJsonPayloadResolver implements ApiPayloadResolver {
         }
     }
 
-    /**
-     * 将spel表达式转换成真实值
-     * @param jsonElement json元素
-     */
-    private JsonPrimitive parseSpelConfigToRealValue(JsonElement jsonElement, ApiResult context){
-        String value = jsonElement.getAsString();
-        value = StringUtils.replace(value,CONFIG_PREFIX_SIGN,"{",3);
-        ValueObject valueObject = new Gson().fromJson(value,ValueObject.class);
-        Object realValue = valueObject.compile(context).getRealValue();
-        if(realValue instanceof Number){
-            return new JsonPrimitive((Number)realValue);
-        }else if(realValue instanceof String){
-            return new JsonPrimitive((String)realValue);
-        }else if(realValue instanceof Boolean){
-            return new JsonPrimitive((Boolean)realValue);
-        }else if(realValue instanceof Character){
-            return new JsonPrimitive((Character)realValue);
-        }
-        return null;
-    }
 
     /**
      * 将spel表达式转换成真实值

+ 5 - 3
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiJsonResultResolver.java

@@ -8,6 +8,8 @@ import com.hrsk.cloud.eg.domain.api.ValueObject;
 import com.hrsk.cloud.eg.domain.common.utils.GsonUtils;
 import org.apache.commons.lang3.StringUtils;
 
+import java.util.Map;
+
 /**
  * @author: bianlanzhou
  * @create: 2024-08-01 15:38
@@ -31,7 +33,7 @@ public class ApiJsonResultResolver implements ApiResultResolver {
 
 
     @Override
-    public Object resolve(String jsonTemplate, ApiResult context) {
+    public Object resolve(String jsonTemplate, Map<String,Object> context) {
         JsonElement jsonElement = GsonUtils.fromJson(jsonTemplate, JsonElement.class);
         traverseJson(jsonElement,jsonElement,null,context,0);
         return jsonElement.toString();
@@ -42,7 +44,7 @@ public class ApiJsonResultResolver implements ApiResultResolver {
      * @param context 上下文
      * @param deep 深度
      */
-    public void traverseJson(JsonElement jsonElement, JsonElement currentElement,String currentKey,ApiResult context,Integer deep) {
+    public void traverseJson(JsonElement jsonElement, JsonElement currentElement,String currentKey,Map<String,Object> context,Integer deep) {
         deep++;
         if(deep >= MAX_DEEP){
             throw new BizException(String.format("请求payload的json配置深度达到允许的最大深度[%s]!",MAX_DEEP));
@@ -110,7 +112,7 @@ public class ApiJsonResultResolver implements ApiResultResolver {
      * 将spel表达式转换成真实值
      * @param jsonElement json元素
      */
-    private JsonPrimitive parseSpelConfigToRealValue(JsonElement jsonElement, ApiResult context){
+    private JsonPrimitive parseSpelConfigToRealValue(JsonElement jsonElement, Map<String,Object> context){
         String value = jsonElement.getAsString();
         value = StringUtils.replace(value,CONFIG_PREFIX_SIGN,"{",3);
         ValueObject valueObject = new Gson().fromJson(value,ValueObject.class);

+ 3 - 2
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiResultResolver.java

@@ -1,9 +1,10 @@
 package com.hrsk.cloud.eg.domain.api.resolver.result;
 
 
-import com.hrsk.cloud.eg.domain.api.ApiContext;
 import com.hrsk.cloud.eg.domain.api.ApiResult;
 
+import java.util.Map;
+
 /**
  * @author: bianlanzhou
  * @create: 2024-08-01 15:37
@@ -18,5 +19,5 @@ public interface ApiResultResolver {
      * @date 2024/9/2 15:19
      * @version 1.0
      */
-    Object resolve(String template, ApiResult context);
+    Object resolve(String template, Map<String,Object> context);
 }

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiResultResolverManage.java

@@ -47,7 +47,7 @@ public class ApiResultResolverManage {
      * @param apiResult
      * @return 解析结果
      */
-    public Object resolve(String code, String template, ApiResult apiResult){
+    public Object resolve(String code, String template, Map<String,Object> apiResult){
         return RESOLVER_MAP.get(code).resolve(template,apiResult);
     }
     /**

+ 10 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/BasicTypeValueObjectResolver.java

@@ -5,6 +5,8 @@ import com.hrsk.cloud.eg.domain.api.ApiContext;
 import com.hrsk.cloud.eg.domain.api.ApiResult;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 
+import java.util.Map;
+
 /**
  * @author: bianlanzhou
  * @create: 2024-07-31 14:35
@@ -25,7 +27,14 @@ public class BasicTypeValueObjectResolver implements ValueObjectResolver {
         return valueObject.getValue();
     }
 
-    public Object resolve(ValueObject valueObject, ApiResult context) {
+    /**
+     * @description:  解析map<string,object></string,object>
+     * @author zhangyy
+     * @date 2024/9/3 15:21
+     * @version 1.0
+     */
+    @Override
+    public Object resolve(ValueObject valueObject, Map<String, Object> context) {
         return valueObject.getValue();
     }
 

+ 20 - 13
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/SpelValueObjectResolver.java

@@ -6,6 +6,9 @@ import com.hrsk.cloud.eg.domain.api.ValueObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+
+import java.util.Map;
 
 /**
  * @author: bianlanzhou
@@ -35,19 +38,23 @@ public class SpelValueObjectResolver  implements ValueObjectResolver{
         }
     }
 
-    /**
-     * 解析
-     * @param valueObject 解析对象
-     * @param context 返回值
-     * @return 解析结果
-     */
+
+    /** 
+     * @description: spel map解析valueObject
+     * @param:  
+     * @return:  
+     * @author zhangyy
+     * @date: 2024/9/3 15:18
+     */ 
     @Override
-    public Object resolve(ValueObject valueObject, ApiResult context) {
-        try{
-            return parser.parseExpression(valueObject.getValue()).getValue(context.getSpelContext());
-        }catch (Exception ex){
-            log.error("属性配置错误!",ex);
-            return null;
-        }
+    public Object resolve(ValueObject valueObject, Map<String, Object> context) {
+      try {
+          StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext(context);
+           return parser.parseExpression(valueObject.getValue()).getValue(standardEvaluationContext);
+      } catch (Exception e) {
+          log.error("属性配置错误!",e);
+          return null;
+      }
+
     }
 }

+ 4 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/ValueObjectResolver.java

@@ -5,6 +5,8 @@ import com.hrsk.cloud.eg.domain.api.ApiContext;
 import com.hrsk.cloud.eg.domain.api.ApiResult;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 
+import java.util.Map;
+
 /**
  * @author: bianlanzhou
  * @create: 2024-07-31 14:32
@@ -19,6 +21,7 @@ public interface ValueObjectResolver {
      */
     Object resolve(ValueObject valueObject, ApiContext context);
 
-    Object resolve(ValueObject valueObject, ApiResult context);
+
+    Object resolve(ValueObject valueObject, Map<String,Object> context);
 }
 

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/vo/ValueObjectResolverManager.java

@@ -62,7 +62,7 @@ public class ValueObjectResolverManager {
         return RESOLVERS.get(key).resolve(valueObject,context);
     }
 
-    public Object resolve(ValueObject valueObject, ApiResult context){
+    public Object resolve(ValueObject valueObject, Map<String,Object> context){
         String type = valueObject.getType();
         String key = valueObject.getType();
         if(StringUtils.equalsAnyIgnoreCase(type, BasicTypeValueObjectResolver.BASIC_TYPES)){

+ 1 - 1
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/business/GenerateHttpApiConfigService.java

@@ -91,7 +91,7 @@ public class GenerateHttpApiConfigService {
         JSONObject resultObj=new  JSONObject();
         KeyValueObject status=new KeyValueObject();
         status.setType("spel");
-        status.setValue("#param.data.status");
+        status.setValue("#root[data][status]");
         resultObj.put("status","#"+JSONObject.toJSONString(status));
         httpApiConfig.setResult(JSONObject.toJSONString(resultObj));
         String jsonString = JSONObject.toJSONString(httpApiConfig);

+ 20 - 1
start/src/test/java/StartTest.java

@@ -8,9 +8,14 @@ import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author zhangyy
@@ -38,7 +43,7 @@ public class StartTest {
 
     @Test
     public void apiTest(){
-      Long apiId= 441277113551168L;
+      Long apiId= 441293753667392L;
         UserInBaseInfoDto user =new UserInBaseInfoDto();
         user.setPhoneMd5("b5500dfab55f42b340d31326561e16cb");
         PlanDto  plan =new PlanDto();
@@ -50,5 +55,19 @@ public class StartTest {
         apiGateway.checkIntoRequest(checkin);
     }
 
+    @Test
+    public void spel(){
+        Map<String,Object> map =new HashMap<>();
+        map.put("key","1");
+        Map<String,Object> map2 =new HashMap<>();
+        map2.put("key","3");
+        map.put("1",map2);
+         String spel = "#root['1']['key']";
+        ExpressionParser parser = new SpelExpressionParser();
+        StandardEvaluationContext context = new StandardEvaluationContext(map);
+        // 这里很关键,如果没有配置MapAccessor,那么只能用['c']['a']这种解析方式
+        System.err.println(parser.parseExpression(spel).getValue(context));
+    }
+
 
 }