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;
}
}