我正在尝试构建一个 url UriComponentsBuilder。
UriComponentsBuilder.fromUriString(BASE)
.pathSegment("api")
.pathSegment("v1")
.queryParam("param1", userId) //userId in null
.queryParam("param2",productId) //productId 12345
.build().toUriString();
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下所示。
"http://localhost/api/v1?param1=¶m2=12345"
Run Code Online (Sandbox Code Playgroud)
当这些查询参数之一为 null 时,我根本不希望该参数键成为 url 的一部分。那么当参数为空时如何动态构造URL呢?我期望这样的事情:
"http://localhost/api/v1?param2=12345"
Run Code Online (Sandbox Code Playgroud)
小智 17
我认为您可能想使用UriComponentsBuilder::queryParamIfPresent而不是您当前正在使用的功能。
来自官方文档:
如果查询参数的值不是 ,则此函数将添加一个查询参数
Optional::empty。如果为空,则根本不会添加该参数。
要将您的变成null一个Optional,请使用Optional::ofNullable.
代码示例:
UriComponentsBuilder.fromUriString(BASE)
.pathSegment("api")
.pathSegment("v1")
.queryParamIfPresent("param1", Optional.ofNullable(userId)) // UserId is null
.queryParamIfPresent("param2", Optional.ofNullable(productId)) // ProductId 12345
.build()
.toUriString();
Run Code Online (Sandbox Code Playgroud)
这将导致 URI 中不param1包含查询字符串。但是,param2将被添加到查询字符串中,因为该字符串不为空。
希望这可以帮助你。
干杯!
-T
| 归档时间: |
|
| 查看次数: |
5236 次 |
| 最近记录: |