public class ICantBelieveThisIsNotInTheStandardLibrary {
public static final URL makeCopyWithDifferentProtocol(URL u, String protocol) {
StringBuffer result = new StringBuffer();
result.append(protocol);
result.append(":");
if (u.getAuthority() != null && u.getAuthority().length() > 0) {
result.append("//");
result.append(u.getAuthority());
}
if (u.getPath() != null) {
result.append(u.getPath());
}
if (u.getQuery() != null) {
result.append('?');
result.append(u.getQuery());
}
if (u.getRef() != null) {
result.append("#");
result.append(u.getRef());
}
return new URL(result.toString());
}
}
4条答案
按热度按时间hc8w905p1#
你可以使用你可以使用的方法:
还有一个扩展性更强的set()方法,它包含8个元素,对于更复杂的URL,您可能需要它。
编辑:就像刚才我说的,我没有注意,set()是受保护的。所以URL在技术上是可变的,但是对于我们人类来说,它是不可变的。所以你只需要构造一个新的URL对象。
okxuctiv2#
也可以使用字符串替换:
drnojrws3#
也可以使用
org.springframework.web.util.UriComponentsBuilder
/org.springframework.web.util.UriComponents
参见:Does there exist a mutable URL/URI object in Java?
7cjasjjr4#
看起来他们忘了让他们的类有用。从
URL.toExternalForm()
窃取代码有助于:建议使用字符串替换的答案更短,但是如果你想改变任何其他URL组件,你将需要这样的东西。