【问题标题】:Java: Is there a simple way to get cookie by name?Java:有没有一种简单的方法可以通过名称获取 cookie?
【发布时间】:2015-05-12 17:07:23
【问题描述】:

我已经搜索了有关如何通过名称获取 cookie 的解决方案,所有解决方案都指向使用 for-loopsif 语句。请参阅下面的代码。

for (Cookie cookie : cookies) {
    if (cookie.getName().equals("<NAME>")) {
        // do something here
    } 
    if (cookie.getName().equals("<ANOTHER_NAME>")) {
        // do something here
    } 
    // and so on...
}

有没有更简单的方法可以通过名称获取值而无需执行循环和 if ?

我需要对我想要检索的某些 cookie 进行“某些”处理另外,我不想遍历每个 cookie!可能有 10 个或更多,而我只需要三个或其他东西。

【问题讨论】:

  • 将cookies放入Map&lt;String, Cookie&gt;(或Multimap)。
  • 哦,这确实可行 :D 我马上试试!谢谢:D
  • 选民注意:不要仅仅因为这是一个初学者级别的问题而投反对票。格式正确,询问者清楚地说明了他们的尝试示例。

标签: java cookies


【解决方案1】:

或者在现代 Java 中:

Map<String, String> cookieMap = 
                Arrays.stream(request.getCookies())
                      .collect(Collectors.toMap(Cookie::getName, Cookie::getValue));

【讨论】:

    【解决方案2】:

    Cookie 名称不是唯一的,因此使用 Cookie 名称作为映射键并不是一个理想的方法。

    由于 cookie 名称不是唯一的,这可能就是为什么这个 Java API 从未更新为提供 getCookieByName() 方法的原因。

    【讨论】:

      【解决方案3】:

      逻辑(如 cmets 中的Matt Ball 所建议)是:

      // ...
      Map<String, Cookie> cookieMap = new HashMap<>();
      for (Cookie cookie : cookies) {
          cookieMap.put(cookie.getName(), cookie);
      }
      
      Cookie firstRequiredCookie = cookieMap.get("<NAME>");
      // do something with firstRequiredCookie 
      Cookie nextRequiredCookie = cookieMap.get("<ANOTHER_NAME>");
      // do something with nextRequiredCookie 
      // ...
      

      【讨论】:

      • 谢谢大家! :D 忘记我的后续问题,我现在明白了 :D 谢谢!我本可以对答案投赞成票,但我的代表不允许我投票。
      猜你喜欢
      • 2017-06-25
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2011-03-02
      • 2011-01-15
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多