これはJAX-RS固有の質問です。 @HeaderParam
ドキュメントによれば:JAX-RS @HeaderParam(リスト付き)、カンマ区切りの要素が1つだけ設定されています
https://docs.oracle.com/javaee/7/api/javax/ws/rs/HeaderParam.html
上記Tを満たす2、3または4のリスト、セットまたはたSortedSetであること。結果のコレクションは読み取り専用です。 型が上記の5にリストされているコレクション型の1つでなく、ヘッダーパラメーターが複数の値で表される場合、パラメーターの最初の値(語彙的に)が使用されます。
ヘッダーに複数の値がある場合は、コレクションにマップできることはドキュメントから明らかです。ここ は私の例です:
@Path("/")
public class TestResource {
@GET
@Path("test")
public String test(@HeaderParam("myHeader") List<String> list) {
System.out.println(list.size());
list.stream().forEach(System.out::println);
return "response";
}
}
クライアント:サーバーコンソールで
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/test");
String response = target.request()
.header("myHeader", "a")
.header("myHeader", "b")
.header("myHeader", "c,d")
.get(String.class);
client.close();
出力:
1
a,b,c,d
一つだけの要素が取り込まれている 'B、C、D' の代わりに4つの別個の要素からなる。 私はここで何が欠けていますか?グーグルでは問題は見つかりましたが、回答は見つかりませんでした。 Jersey 2.25.1を使用しています。および組み込みのTomcatでそれを実行している:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.25.1</version>
</dependency>
<!-- ............... -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
</configuration>
</plugin>
おかげ
同様の応答がJersey [issue 2436](https://github.com/jersey/jersey/issues/2436)で提供されています。 – kfateem