javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie ,有什么区别?

javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie , What is the difference?

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

提前致谢:)

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

Cookie

Represents the value of a HTTP cookie, transferred in a request.

NewCookie

Used to create a new HTTP cookie, transferred in a response.

NewCookie,当在 Response 中发送时,会设置一个 Set-Cookie 响应 header 与 cookie 信息, Cookie 将使用 cookie 信息设置 Cookie request header。这是根据 HTTP 规范。

用法示例:

@GET
public Response get() {
    return Response.ok("blah")
            .cookie(new NewCookie("foo-cookie", "Whosebug2020"))
            .build();
}

[..]

Client client = ClientBuilder.newClient();
Response response = client
        .target("https://cookieurl.com/api/some-resource")
        .request()
        .cookie(new Cookie("foo-cookie", "Whosebug2020"))
        .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();