【发布时间】:2016-03-06 21:41:37
【问题描述】:
我在 JAX-RS API javax.ws.rs.core.Cookie 和 javax.ws.rs.core.NewCookie 中找到了两个类。一个比另一个有什么优势?
我想知道推荐使用哪一种以及何时使用?
提前致谢:)
【问题讨论】:
标签: java api rest cookies jax-rs
我在 JAX-RS API javax.ws.rs.core.Cookie 和 javax.ws.rs.core.NewCookie 中找到了两个类。一个比另一个有什么优势?
我想知道推荐使用哪一种以及何时使用?
提前致谢:)
【问题讨论】:
标签: java api rest cookies jax-rs
这不是关于推荐,而是关于合适。一种用于请求,一种用于响应。您可以看到两个不同的 javadocs。
表示 HTTP cookie 的值,在 request 中传输。
用于创建新的 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();
【讨论】: