diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/MagicResourceService.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/MagicResourceService.java index 735097ec..b0bb239d 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/MagicResourceService.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/MagicResourceService.java @@ -1,5 +1,6 @@ package org.ssssssss.magicapi.core.service; +import org.apache.commons.lang3.StringUtils; import org.ssssssss.magicapi.core.resource.Resource; import org.ssssssss.magicapi.core.model.*; import org.ssssssss.magicapi.utils.PathUtils; @@ -9,6 +10,8 @@ import java.io.OutputStream; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 资源存储服务 @@ -130,7 +133,10 @@ default String getScriptName(MagicEntity entity){ String fullName; if(entity instanceof PathMagicEntity){ PathMagicEntity pme = (PathMagicEntity) entity; - fullName = String.format("/%s/%s(/%s/%s)", getGroupName(pme.getGroupId()), pme.getName(), getGroupPath(pme.getGroupId()), pme.getPath()); + fullName = String.format("/%s/%s(/%s)", getGroupName(pme.getGroupId()), pme.getName(), Stream + .of(getGroupPath(pme.getGroupId()), pme.getPath()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining("/"))); } else { fullName = String.format("/%s/%s", getGroupName(entity.getGroupId()), entity.getName()); } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/ApiInfoMagicResourceStorage.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/ApiInfoMagicResourceStorage.java index 65be154f..04690277 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/ApiInfoMagicResourceStorage.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/ApiInfoMagicResourceStorage.java @@ -5,7 +5,8 @@ import org.ssssssss.magicapi.core.service.AbstractPathMagicResourceStorage; import org.ssssssss.magicapi.utils.PathUtils; -import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ApiInfoMagicResourceStorage extends AbstractPathMagicResourceStorage { @@ -27,17 +28,27 @@ public Class magicClass() { @Override public String buildMappingKey(ApiInfo info, String path) { - return info.getMethod().toUpperCase() + ":" + super.buildMappingKey(info, path); + return info.getMethod().toUpperCase() + ":" + path; } @Override public String buildMappingKey(ApiInfo info) { - return PathUtils.replaceSlash(buildMappingKey(info, this.prefix + Objects.toString(magicResourceService.getGroupPath(info.getGroupId()), ""))); + String path = magicResourceService.getGroupPath(info.getGroupId()); + path = Stream.of(this.prefix, path, info.getPath()) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining("/")); + + // 若分组+接口路径拼接后都是空,则向上返回空 + if (this.prefix.equals(path)) { + return null; + } + + return PathUtils.replaceSlash(buildMappingKey(info, path)); } @Override public void validate(ApiInfo entity) { notBlank(entity.getMethod(), REQUEST_METHOD_REQUIRED); - super.validate(entity); + notBlank(entity.getScript(), SCRIPT_REQUIRED); } } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/DefaultMagicAPIService.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/DefaultMagicAPIService.java index 3cad8c8a..986ed6a9 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/DefaultMagicAPIService.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/service/impl/DefaultMagicAPIService.java @@ -37,6 +37,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; @MagicModule("magic") public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstants { @@ -78,7 +80,11 @@ private T execute(RequestEntity requestEntity, PathMagicEntity info, Map boolean saveFile(T entity) { } // 路径检查 if (storage.requirePath()) { - notBlank(((PathMagicEntity) entity).getPath(), PATH_REQUIRED); + // FIXME String newMappingKey = storage.buildKey(entity); + notBlank(newMappingKey, PATH_REQUIRED); isTrue(pathCache.get(storage.folder()).entrySet().stream().noneMatch(entry -> entry.getValue().equals(newMappingKey) && !entry.getKey().equals(entity.getId())), PATH_CONFLICT); } storage.validate(entity);