diff --git a/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java b/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java index 0537ba70..8a3611c1 100644 --- a/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java +++ b/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java @@ -21,6 +21,7 @@ import org.jeecg.config.RouterDataType; import org.jeecg.loader.repository.DynamicRouteService; import org.jeecg.loader.repository.MyInMemoryRouteDefinitionRepository; import org.jeecg.loader.vo.MyRouteDefinition; +import org.jeecg.loader.vo.PredicatesVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; @@ -35,10 +36,7 @@ import reactor.core.publisher.Mono; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.concurrent.Executor; /** @@ -207,10 +205,26 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware { } Object predicates = obj.get("predicates"); if (predicates != null) { - JSONArray list = JSON.parseArray(predicates.toString()); + + List list = JSON.parseArray(predicates.toString(), PredicatesVo.class); + Map> groupedPredicates = new HashMap<>(); + + for (PredicatesVo predicatesVo : list) { + String name = predicatesVo.getName(); + List args = predicatesVo.getArgs(); + groupedPredicates.computeIfAbsent(name, k -> new ArrayList<>()).addAll(args); + } + + list = new ArrayList<>(); + for (Map.Entry> entry : groupedPredicates.entrySet()) { + String name = entry.getKey(); + List args = entry.getValue(); + list.add(new PredicatesVo(name, args)); + } + List predicateDefinitionList = new ArrayList<>(); for (Object map : list) { - JSONObject json = (JSONObject) map; + JSONObject json = JSON.parseObject(JSON.toJSONString(map)); PredicateDefinition predicateDefinition = new PredicateDefinition(); //update-begin-author:zyf date:20220419 for:【VUEN-762】路由条件添加异常问题,原因是部分路由条件参数需要设置固定key String name=json.getString("name"); diff --git a/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/PredicatesVo.java b/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/PredicatesVo.java new file mode 100644 index 00000000..b12484d3 --- /dev/null +++ b/jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/PredicatesVo.java @@ -0,0 +1,16 @@ +package org.jeecg.loader.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PredicatesVo { + private String name; + private List args; +}