spring-web - Spring 的 URIComponentsBuilder 将端口号的冒号 (:) 转换为斜杠 (/)
问题描述
在测试中,我将带有冒号的端口号(“ http://example.com:port ”)的示例 URL 注入到我的配置中,然后我的生产代码使用它来构造UriComponentsBuilder
最终创建 URI细绳。
但是,该冒号字符被 转换为正斜杠UriComponentsBuilder
,如此 MCVE 中所示:
@Test
public void portNumberFromHttpUrl() {
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://example.com:port");
String uriString = builder.toUriString();
assertThat(uriString).isEqualTo("http://example.com:port");
}
该测试失败如下:
org.junit.ComparisonFailure:
预期:“ http://example.com:port ”
实际:“ http://example.com/port ”
为什么:
正在转换为 a /
?
解决方案
MCVE 几乎立即帮助我自己回答了这个问题,但我将把问题留在这里,因为我在这里或网上其他任何地方都找不到相同的问题,我想这可能会节省其他人一些时间:
似乎UriComponentsBuilder
认识到端口应该是一个数字,所以这个(更现实的)案例通过了:
@Test
public void portNumberFromHttpUrl() {
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://example.com:123");
String uriString = builder.toUriString();
assertThat(uriString).isEqualTo("http://example.com:123");
}
从更多的调查来看,它似乎将 a 放在/
它在 a 之后遇到的第一个非数字字符之前:
,所以:
http://example.com:a123
-> http://example.com/a123
http://example.com:12a3
-> http://example.com:12/a3
http://example.com:123a
->http://example.com:123/a
不是很明显,但我猜是有道理的。
推荐阅读
- c++ - getsockname 总是返回协议族 0 的结构
- c# - .Net 的 GraphQL 错误:未映射的选择字段
- python - 为 x 轴上的每个值绘制 3 个条形图
- laravel - 单击下拉按钮时,导航中的下拉按钮会扩展导航的高度。怎么解决?
- node.js - 使用 NestJS 和 GRPC 服务器进行身份验证
- lua - LuaR是什么版本
- reactjs - apollographql - 更改本地状态对象中的条目并重新渲染?
- java - 我可以从键盘上读取基于相同界面但不同类的 N 种不同的几何形式吗?
- c++ - 与 std::optional nullopt 等效的 boost 是什么?
- c# - 实体框架核心中的自联接