是否可以将具有多个参数值的网址构建为以逗号分隔的列表?
以下代码段打印网址:
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.UriComponentsBuilder;
public class MyMain {
public static void main(String[] args) {
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("order", "1");
queryParams.add("order", "2");
System.out.println(UriComponentsBuilder.fromHttpUrl("http://example.com")
.queryParams(queryParams)
.build()
.toString());
}
}
此代码生成的网址为:
http://example.com?order=1&order=2
我想得到的是:
http://example.com?order=1,2
使用另一个框架不是一个选项,因为我使用框架,我想避免构建逻辑来构建我的方式。
弹簧网或弹簧靴中有什么可以做到的吗?
答案 0 :(得分:1)
尝试使用 String.join
package com.deliveryhero.discovery.common.dtos.recommendation;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.Collection;
import static java.util.Arrays.asList;
public class MyMain {
public static void main(String[] args) {
Collection<String> values = asList("1","2");
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("order", String.join(",", values));
System.out.println(UriComponentsBuilder.fromHttpUrl("http://example.com")
.queryParams(queryParams)
.build()
.toString());
}
}
答案 1 :(得分:0)
我有同样的问题,但我也找不到任何Spring解决方案。因此我为此写了一个简单的辅助函数:
@Test
public void testCreateValidMatrixVariableUrl() {
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("order", "1");
queryParams.add("order", "2");
String invalidUrl = UriComponentsBuilder.fromHttpUrl("http://example.com")
.path("").query("order={order}")
.buildAndExpand(queryParams)
.toString();
assertThat(prepareMatrixVariableUrl(invalidUrl)).isEqualTo("http://example.com?order=1,2");
}
private String prepareMatrixVariableUrl(String url) {
return url.replaceAll("\\[", "")
.replaceAll("\\]", "")
.replaceAll(" ", "");
}
请注意,prepareMatrixVariableUrl(...)
会替换所有括号([
和]
)和空格(),因为如果不应用辅助函数,您的网址变量将具有格式如:
http://example.com?order=[1, 2]
答案 2 :(得分:0)
有一个采用集合或varargs的queryParam版本。参见:
和