文字列の配列/リストをSpringRestTemplateを介してRESTサーバーに送信しようとしています。
これは私のAndroid側にあります:
private List<String> articleids = new ArrayList<>();
articleids.add("563e5aeb0eab252dd4368ab7");
articleids.add("563f2dbd9bb0152bb0ea058e");
final String url = "https://10.0.3.2:5000/getsubscribedarticles";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
.queryParam("articleids", articleids);
Java.net.URI builtUrl = builder.build().encode().toUri();
Log.e("builtUrl", builtUrl.toString());
BuiltUrlは次のとおりです。 https://10.0.3.2:5000/getsubscribedarticles?articleids=%5B563e5aeb0eab252dd4368ab7,%20563f2dbd9bb0152bb0ea058e%5D
サーバー側:
@RequestMapping(value = "/getsubscribedarticles", method = RequestMethod.GET)
public List<Posts> getSubscribedPostFeed(@RequestParam("articleids") List<String> articleids){
for (String articleid : articleids {
logger.info(" articleid : " + articleid);
}
}
サーバーログ:
.13:11:35.370 [http-nio-8443-exec-5] INFO c.f.s.i.ServiceGatewayImpl-articleid:[563e5aeb0eab252dd4368ab7
.13:11:35.370 [http-nio-8443-exec-5] INFO c.f.s.i.ServiceGatewayImpl-articleid:563f2dbd9bb0152bb0ea058e]
リストの最初の項目に「[」、最後の項目に「]」を含めるべきではないため、私が見ることができるのは間違っています。
私はこのスレッドを読みました Spring RestTemplateを使用してListまたはString配列をgetForObjectに渡す方法 しかし、実際には質問に答えていません。
選択した回答はPOSTリクエストを発行しますが、GETリクエストを実行したいのですが、リストを保持するために追加のオブジェクトが必要であり、追加のオブジェクトを作成したくない場合はSpringRestTemplateでネイティブにそれを行うことができます。
正しいURLは次のようになると思います。
_https://10.0.3.2:5000/getsubscribedarticles?articleids[]=123&articleids[]=456&articleids[]=789
_
public UriComponentsBuilder queryParam(String name, Object... values)
のコードをざっと見た後、次のようにUriComponentsBuilder
を使用して解決します。
_UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
.queryParam("articleids[]", articleids.toArray(new String[0]));
_
2番目のパラメータはarray
ですが、オブジェクト/コレクションではないことが重要です。
Java 8を使用すると、これは私にとってはうまくいきました:
UriComponentsBuilder builder = fromHttpUrl(url);
builder.queryParam("articleids", String.join(",", articleids));
URI uri = builder.build().encode().toUri();
次のようなURLを形成します。
https://10.0.3.2:5000/getsubscribedarticles?articleids=123,456,789
あなたはすべて正しいことをしました。 []
なしで呼び出す必要があります。
.../getsubscribedarticles/articleids=foo,bar,42
で呼び出すだけです
これをSpringBoot 1.2.6でテストしたところ、次のように動作します。
彼の提案をしてくれたdOxに感謝します-私はPathVariableでこれを解決することができました-私はAndroid用のURLにリストを設定しました:
final String url = "https://10.0.3.2:5000/getsubscribedarticles/"+new ArrayList<>(articleids);
私の残りのサーバーの場合:
@RequestMapping(value = "/getsubscribedarticles/[{articleids}]", method = RequestMethod.GET)
public List<Posts> getSubscribedPostFeed(@PathVariable String[] articleids){
}