在我使用的大部分代码中都有可怕的东西,比如:
String url = "../Somewhere/SomeServlet?method=AMethod&id="+object.getSomething()+ "&aParam="+object.getSomethingElse());
Run Code Online (Sandbox Code Playgroud)
或者 - 更糟糕的是:
String url = "Somewhere/Here/Something.jsp?path="+aFile.toString().replace("\\","/")+ "&aParam="+object.getSomethingElse());
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法:
从本质上讲 - 构建字符串要比正确地完成字符串要容易得多.有没有办法正确地做到这一点就像建立字符串一样简单?
添加
为了清楚起见 - 经过一番思考 - 我想我正在寻找类似的东西:
String s = new MyThing()
.setPlace("Somewhere/Something.jsp")
.addParameter(aName,aValue)
.addParameter(aName,aFile)
.toString();
Run Code Online (Sandbox Code Playgroud)
因此它将处理转义的所有不愉快并添加"?"/"&"并将"\"更改为"/"而不是使用"\"作为文件等.
如果我必须自己编写一个(即如果Apache不是一个选项),那么有真正的Java技术可以正确地转义各个部分.我的意思是在参数中将""转换为"".而逃避""在其他地方"%20".
Bar*_*run 24
您可以使用Apache URIBuilder
示例代码:完整的Apache示例
URIBuilder builder = new URIBuilder()
.setScheme("http")
.setHost("apache.org")
.setPath("/shindig")
.addParameter("hello world", "foo&bar")
.setFragment("foo");
builder.toString();
Run Code Online (Sandbox Code Playgroud)
输出:http://apache.org/shindig?hello + world = foo%26bar#foo
Mar*_*zak 12
您也可以使用spring UriComponentsBuilder
UriComponentsBuilder
.fromUriString(baseUrl)
.queryParam("name", name)
.queryParam("surname", surname)
.build().toUriString();
Run Code Online (Sandbox Code Playgroud)
我已经写完了,您可以在需要额外功能的地方进行更改.它不使用任何外部资源,如果我查看过某些内容,请告诉我!
它基本上是URI类的包装器,允许您更轻松地将子目录和参数添加到URI.如果您对某些内容不感兴趣,可以设置默认值.
编辑:我添加了一个使用相对URI的选项(根据您的问题).
public class Test {
public static void main(String[] args) throws URISyntaxException,
MalformedURLException {
URLBuilder urlb = new URLBuilder("www.example.com");
urlb.setConnectionType("http");
urlb.addSubfolder("somesub");
urlb.addSubfolder("anothersub");
urlb.addParameter("param lol", "unknown");
urlb.addParameter("paramY", "known");
String url = urlb.getURL();
System.out.println(url);
urlb = new URLBuilder();
urlb.addSubfolder("servlet");
urlb.addSubfolder("jsp");
urlb.addSubfolder("somesub");
urlb.addSubfolder("anothersub");
urlb.addParameter("param lol", "unknown");
urlb.addParameter("paramY", "known");
String relUrl = urlb.getRelativeURL();
System.out.println(relUrl);
}
}
class URLBuilder {
private StringBuilder folders, params;
private String connType, host;
void setConnectionType(String conn) {
connType = conn;
}
URLBuilder(){
folders = new StringBuilder();
params = new StringBuilder();
}
URLBuilder(String host) {
this();
this.host = host;
}
void addSubfolder(String folder) {
folders.append("/");
folders.append(folder);
}
void addParameter(String parameter, String value) {
if(params.toString().length() > 0){params.append("&");}
params.append(parameter);
params.append("=");
params.append(value);
}
String getURL() throws URISyntaxException, MalformedURLException {
URI uri = new URI(connType, host, folders.toString(),
params.toString(), null);
return uri.toURL().toString();
}
String getRelativeURL() throws URISyntaxException, MalformedURLException{
URI uri = new URI(null, null, folders.toString(), params.toString(), null);
return uri.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
绝对
http://www.example.com/somesub/anothersub?param%20lol=unknownmY=known
相对的
/ servlet的/ JSP/somesub/anothersub?PARAM%20lol =未知¶mY =已知
| 归档时间: |
|
| 查看次数: |
49135 次 |
| 最近记录: |