2017-09-01 27 views
1

カンマ区切りリストとして複数のパラメータ値を持つURLを作成することはできますか?カンマ区切りリストとしての複数のクエリパラメータ値

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()); 
    } 
} 

このコードによって生成URLは次のとおりです:私は取得したいと思い何

http://example.com?order=1&order=2 

は次のとおりです。

http://example.com?order=1,2 

別の使い方

次のスニペットは、URLを出力しますフレームワークは選択肢ではなく、フレームワークを使用しているので、私の方法でURLを構成するロジックを構築しないようにしたいと考えています。

これを行うことができる春のウェブや春のブートには何かありますか?

答えて

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(" ", ""); 
} 

は、ヘルパー関数を適用せずに、あなたのURL変数のような形式を持ってしまうためprepareMatrixVariableUrl(...)は、すべてのブラケット([])とスペース()に取って代わることに注意してください:http://example.com?order=[1, 2]

関連する問題