【问题标题】:javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie , What is the difference?javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie ,有什么区别?
【发布时间】:2016-03-06 21:41:37
【问题描述】:

我在 JAX-RS API javax.ws.rs.core.Cookiejavax.ws.rs.core.NewCookie 中找到了两个类。一个比另一个有什么优势? 我想知道推荐使用哪一种以及何时使用?

提前致谢:)

【问题讨论】:

    标签: java api rest cookies jax-rs


    【解决方案1】:

    这不是关于推荐,而是关于合适。一种用于请求,一种用于响应。您可以看到两个不同的 javadocs。

    Cookie

    表示 HTTP cookie 的值,在 request 中传输。

    NewCookie

    用于创建新的 HTTP cookie,在响应中传输。

    NewCookie,当在Response中发送时,会设置一个带有cookie信息的Set-Cookieresponse头,Cookie会设置Cookierequest 带有 cookie 信息的标头。这是根据 HTTP 规范。

    示例用法:

    @GET
    public Response get() {
        return Response.ok("blah")
                .cookie(new NewCookie("foo-cookie", "StAcKoVeRfLoW2020"))
                .build();
    }
    
    [..]
    
    Client client = ClientBuilder.newClient();
    Response response = client
            .target("https://cookieurl.com/api/some-resource")
            .request()
            .cookie(new Cookie("foo-cookie", "StAcKoVeRfLoW2020"))
            .get();
    
    @Path("some-resource")
    public class SomeResource {
    
        @POST
        public Response post(@CookieParam("foo-cookie") Cookie cookie) {
        }
    }
    

    通常在客户端,您不会像我一样手动创建Cookie。大多数时候,您会从初始请求的响应中获取 cookie,然后将这些 cookie 发回。这意味着在Response 中,您将拥有NewCookies,您需要将它们转换为Cookies 以用于下一个请求。这可以通过调用newCookie.toCookie()来轻松完成

    Map<String, NewCookie> cookies = response.getCookies();
    Invocation.Builder ib = target.request();
    for (NewCookie cookie: cookies.values()) {
        ib.cookie(cookie.toCookie());
    }
    Response response = ib.get();
    

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 2014-07-01
      • 2021-07-16
      • 2013-03-18
      • 1970-01-01
      • 2013-01-15
      • 2010-10-02
      相关资源
      最近更新 更多