2017-03-19 2 views
2

これは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> 

おかげ

答えて

1

これは、アプリケーションのバグではありません。それは設計どおりに動作します。複数のヘッダパラメータはコンマで区切られます。

を参照してください。Standard for adding multiple values of a single HTTP Header to a request or responseを参照してください。複数のヘッダー属性の使用について、httpプロトコルrfcを参照しています。

+0

同様の応答がJersey [issue 2436](https://github.com/jersey/jersey/issues/2436)で提供されています。 – kfateem

関連する問題