是否存在一个可以将片段和查询从String解析为URI的库,即使字符串中的片段和查询顺序不正确?
import java.net.URI;
public class UriTest {
public static void main(String[] args){
String validUriString = "http://localhost:4200/?name=value#/fragment";
String invalidUriString = "http://localhost:4200/#/fragment?name=value";
URI validUri = URI.create(validUriString);
URI invalidUri = URI.create(invalidUriString);
System.out.println("OK: "+validUri.getFragment());
System.out.println("OK: "+validUri.getQuery()+"\n");
System.out.println("NOT OK: "+invalidUri.getFragment());
System.out.println("NOT OK: "+invalidUri.getQuery());
}
}
输出:
OK: /fragment
OK: name=value
NOT OK: /fragment?name=value
NOT OK: null
在两种情况下都能获得相同的结果将是很好的事情。
答案 0 :(得分:0)
不能保证这对于所有URL都适用,但是您可以尝试检查URL是否损坏并按如下所示进行修复:
...
public static String fixUrl(String url) {
int fragmentIndex = url.indexOf("#");
int queryIndex = url.indexOf("?");
if(fragmentIndex < queryIndex && fragmentIndex > -1)
return url.substring(0,fragmentIndex) + url.substring(queryIndex) + url.substring(fragmentIndex, queryIndex);
else
return url;
}
public static void main (String[] args) {
String validUriString = "http://localhost:4200/?name=value#/fragment";
String invalidUriString = "http://localhost:4200/#/fragment?name=value";
URI validUri = URI.create(fixUrl(validUriString));
URI invalidUri = URI.create(fixUrl(invalidUriString));
System.out.println("OK: "+validUri.getFragment());
System.out.println("OK: "+validUri.getQuery()+"\n");
System.out.println("OK: "+invalidUri.getFragment());
System.out.println("OK: "+invalidUri.getQuery());
}