当前位置: 首页 > 知识库问答 >
问题:

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

耿学义
2023-03-14

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

https://docs.oracle.com/javaee/7/api/javax/ws/rs/HeaderParam.html

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

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

@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  

只有一个元素填充为“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>

谢谢

共有2个答案

池照
2023-03-14

在我看来像个虫子,但他们声称这就是他们打算新泽西州的运作方式(https://github.com/jersey/jersey/issues/2436)。这个推理在我看来是有问题的。RFC 2616并不像他们暗示的那么简单。RFC 2616所说的基本上是,如果一个标头可以被视为在语义上等同于逗号分隔的列表,它可以多次出现。逗号分隔的列表是否应该被视为列表似乎完全取决于开发人员,并且您对列表类型和HeaderParam注释的明确使用似乎相当简单。

麻书
2023-03-14

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

查看将单个HTTP头的多个值添加到请求或响应的标准,它引用HTTP协议rfc以使用多个头属性。

 类似资料:
  • 问题内容: 不幸的是,我有一个字段列,其中包含诸如 4 12,3 8,5,6,7 我将编写一个SELECT语句,其结果将是: 4 12 8 由于MySQL不提供“拆分”功能,我如何在实践中做到这一点? 问题答案: 使用MySQL的功能: 但是,将列表保留在以定界符分隔的字符串中通常是对像MySQL这样的关系数据库管理系统的低效使用:通常最好通过将这样的列表保留在成对的单独表中来规范化数据结构。

  • 我试图在一个用冒号“:”分隔的列表中添加所有三个元素 示例输出: 我的尝试:

  • 我有以下三个要素: 请帮助用一个更好的方法来处理这件事。

  • 问题内容: 我正在编写导出功能,我需要将联系人导出到Excel,并且遇到了技术难题-也许我的SQL技能的差距更接近事实了。;) 这是场景:我在数据库中有一堆联系人。每个联系人可以具有许多不同的角色,例如,一个联系人可以是C#开发人员和DBA,也可以是DBA和IT经理。它们分为三个表,如下所示: 不太难遵循。有一组联系人和一组角色。这些由相应ID上的ContactRole表连接。 导出联系人时,我需

  • 我试图验证一个逗号分隔的数字列表1-31唯一(不重复)。 20、15、3 我尝试但是它接受重复的数字

  • 问题内容: 我的程序从文件中读取一行。此行包含逗号分隔的文本,例如: 我希望拆分的结果是这样的: 如果使用,我将得到: 换句话说:子字符串中的逗号不是分隔符。该如何处理? 问题答案: 你可以尝试以下正则表达式: 这将分割字符串,,后跟偶数双引号。换句话说,它用双引号引起来的逗号分隔。如果你在字符串中使用了引号,则此方法将起作用。 说明: 你甚至可以在代码中使用正则表达式使用修饰符来键入此类内容。修