Jersey JAX-RS@HeaderParam with List,仅用一个逗号分隔的元素填充

Jersey JAX-RS@HeaderParam with List,仅用一个逗号分隔的元素填充,jersey,jax-rs,Jersey,Jax Rs,这是一个JAX-RS特有的问题。根据@HeaderParam文件: 是列表、集合或分类集合,其中T满足上述2、3或4。生成的集合是只读的。 如果该类型不是上面5中列出的集合类型之一,并且header参数由多个值表示,则使用该参数的第一个值(词汇) 从文档中可以清楚地看到,如果一个标题有多个值,那么它可以映射到一个集合。 下面是我的例子: @Path("/") public class TestResource { @GET @Path("test") public String

这是一个JAX-RS特有的问题。根据
@HeaderParam
文件:

是列表、集合或分类集合,其中T满足上述2、3或4。生成的集合是只读的。 如果该类型不是上面5中列出的集合类型之一,并且header参数由多个值表示,则使用该参数的第一个值(词汇)

从文档中可以清楚地看到,如果一个标题有多个值,那么它可以映射到一个集合。 下面是我的例子:

@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";
  }

}
服务器控制台上的输出:

1
a,b,c,d  
只有一个元素填充为“a、b、c、d”,而不是4个单独的元素。 我错过了什么?谷歌搜索了这个问题,但没有找到任何答案。 我用的是泽西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>

org.glassfish.jersey.containers
jersey容器servlet
2.25.1
org.apache.tomcat.maven
tomcat7 maven插件
2.2
/

谢谢

这不是您的应用程序的错误。它按设计工作。多个标头参数以逗号分隔


看看它引用了http协议rfc来使用多个头属性。

在我看来似乎是一个bug,但他们声称这就是他们想要的功能(per)。我觉得这个理由有问题。RFC2616并不像它们暗示的那么简单。RFC2616所说的本质上是,如果可以将头视为在语义上等同于逗号分隔的列表,那么它可以多次出现。是否应将逗号分隔的列表视为列表似乎完全取决于开发人员,而且您清楚地使用列表类型和HeaderParam注释表明了这一意图似乎相当简单。

Jersey上也提供了类似的响应。您好,有什么解决方案吗。我也在尝试同样的事情,但是对于baggage标头,逗号分隔的键值对仍然没有被分隔成不同的列表元素?
<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>