All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fastchar.core.FastUrlParser Maven / Gradle / Ivy

package com.fastchar.core;

import com.fastchar.utils.FastArrayUtils;
import com.fastchar.utils.FastStringUtils;

import java.util.*;

final class FastUrlParser {

    /**
     * 获得请求路由
     * @param url
     * @return
     */
    public static String getContentPath(String url) {
        String left = url.split("\\?")[0];
        if (!left.endsWith("/")) {
            left += "/";
        }
        String[] split = left.split(FastChar.getConstant().getProjectName());
        return split[1];
    }


    public static List parse(String url) {
        List params = parseParams(url);

        url = url.split("[?]")[0];
        List urls = new ArrayList<>();
        String[] split = url.split("/");
        split = FastArrayUtils.trimEmpty(split);
        StringBuilder stringBuilder = new StringBuilder("/");

        FastUrl first = new FastUrl();
        first.setLevel(1);
        first.setMethodRoute(stringBuilder.toString());
        first.setUrlParams(Arrays.asList(split));
        urls.add(first);

        int level = first.getLevel() + 1;
        for (int i = 0; i < split.length; i++) {
            String address = split[i];
            stringBuilder.append(address).append("/");
            List urlParams = new ArrayList<>(Arrays.asList(split).subList(i + 1, split.length));
            FastUrl fastUrl = new FastUrl();
            fastUrl.setLevel(level);
            fastUrl.setParams(params);
            fastUrl.setMethodRoute(FastStringUtils.stripEnd(stringBuilder.toString(), "/"));
            fastUrl.setUrlParams(urlParams);
            urls.add(fastUrl);
            level++;
        }
        Collections.sort(urls, new Comparator() {
            @Override
            public int compare(FastUrl o1, FastUrl o2) {
                return Integer.compare(o2.getLevel(), o1.getLevel());
            }
        });
        return urls;
    }


    /**
     * 解析url参数
     *
     * @param url 例如:down?path=name.txt&id=1&key=a
     */
    public static List parseParams(String url) {
        String[] splitUrl = url.split("[?]");
        if (splitUrl.length != 2) {
            return null;
        }
        List params = new ArrayList<>();
        String[] split = splitUrl[1].split("[&]");
        for (String keyValue : split) {
            String[] values = keyValue.split("[=]");
            if (values.length == 2) {
                params.add(new FastRequestParam().setName(values[0]).setValue(values[1]));
            }
        }
        return params;
    }




}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy