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

提前致谢 :)

最佳答案

这不是建议,而是适当的。一个是请求,一个是响应。您可以看到两个不同的javadocs。
Cookie

NewCookie
NewCookieResponse中发送时,将使用cookie信息设置Set-Cookie响应 header ,而Cookie将使用cookie信息设置Cookie请求 header 。这是根据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中,您将拥有NewCookie,并且需要将其转换为Cookie,以用于下一个请求。可以通过调用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();

10-04 10:21