2017-09-01 80 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]