2017-09-01 85 views
1

是否可以使用多个参数值构建一个带有逗号分隔列表的网址?多个查询参数值,以逗号分隔列表

下面的代码片段打印网址:

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

我有同样的问题,但我找不到任何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]