001package run.iget.framework.propertity;
002
003import java.util.Objects;
004import java.util.Set;
005
006import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
007
008import cn.hutool.core.collection.CollUtil;
009import cn.hutool.core.util.ObjectUtil;
010import cn.hutool.core.util.StrUtil;
011
012/**
013 * 代码千万行,注释第一行,注释不规范,迭代两行泪
014 * ---------------类描述-----------------
015 * 为指定的Controller请求路径,添加上统一的前缀
016 * ---------------类描述-----------------
017 * @author 大周
018 * @date 2023/1/23 23:56
019 */
020public class ApiPathPrefixUtils {
021
022    /**
023     * 为指定的Controller请求路径,添加上统一的前缀
024     * @param properties 配置对象
025     * @param configurer 路径配置对象
026     * @param controllerPackages 需要添加路径前缀的包名
027     */
028    public static void addApiPathPrefix(ModuleProperties properties, PathMatchConfigurer configurer,
029                                        String... controllerPackages) {
030        if (Objects.isNull(controllerPackages) || controllerPackages.length == 0) {
031            return;
032        }
033        for (String controllerPackage : controllerPackages) {
034            addApiPathPrefix(properties, configurer, controllerPackage);
035        }
036    }
037
038    /**
039     * 为指定的Controller请求路径,添加上统一的前缀
040     * @param properties 配置对象
041     * @param configurer 路径配置对象
042     * @param controllerPackages 需要添加路径前缀的包名
043     */
044    public static void addApiPathPrefix(ModuleProperties properties, PathMatchConfigurer configurer,
045                                        Set<String> controllerPackages) {
046        if (CollUtil.isEmpty(controllerPackages)) {
047            return;
048        }
049        controllerPackages.forEach(controllerPackage -> addApiPathPrefix(properties, configurer, controllerPackage));
050    }
051
052    /**
053     * 为指定的Controller请求路径,添加上统一的前缀
054     * @param properties 配置对象
055     * @param configurer 路径配置对象
056     * @param controllerPackage 需要添加路径前缀的包名
057     */
058    public static void addApiPathPrefix(ModuleProperties properties, PathMatchConfigurer configurer,
059                                        String controllerPackage) {
060        if (ObjectUtil.hasNull(properties, configurer)
061                || StrUtil.hasBlank(properties.getApiPathPrefix(), controllerPackage)) {
062            return;
063        }
064        if (!Boolean.TRUE.equals(properties.getEnable())) {
065            return;
066        }
067        // 为指定包下的controller添加前缀
068        configurer.addPathPrefix(properties.getApiPathPrefix(),
069                c -> Objects.equals(controllerPackage, c.getPackage().getName()));
070    }
071
072}