Это не проблема URIComponents
, он анализирует то, что получает на входе.Более конкретно, глядя на источник UriComponentsBuilder.fromHttpUrl
, вы видите:
public static UriComponentsBuilder fromHttpUrl(String httpUrl) {
Assert.notNull(httpUrl, "HTTP URL must not be null");
Matcher matcher = HTTP_URL_PATTERN.matcher(httpUrl);
if (matcher.matches()) {
UriComponentsBuilder builder = new UriComponentsBuilder();
String scheme = matcher.group(1);
builder.scheme(scheme != null ? scheme.toLowerCase() : null);
builder.userInfo(matcher.group(4));
String host = matcher.group(5);
if (StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) {
throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL");
}
builder.host(host);
String port = matcher.group(7);
if (StringUtils.hasLength(port)) {
builder.port(port);
}
builder.path(matcher.group(8));
builder.query(matcher.group(10));
return builder;
}
else {
throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL");
}
}
, где вы можете заметить, что сопоставление с образцом определено в ожидаемой структуре URL-адреса, а детали анализируются в соответствии с сопоставителем.Если вы видите IP
, это означает, что URL, указанный во входе (request.getRequestURL().toString()
), содержал адрес IP
в качестве хоста.
Это означает, что вы должны искать виновного в цепочке, начиная с того, кто вызывает этот кусок кода, и переходя по ссылкам, пока не найдете причину.