如何把一个cookie在Jersey RESTful webservice? [英] How can I put a cookie in Jersey RESTful webservice?

查看:460
本文介绍了如何把一个cookie在Jersey RESTful webservice?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将PUT webservice结果中的Cookie放到Jersey API的POST webservice。



这是我的代码

  WebResource service1 = client.resource(http://test.com); 

ClientResponse logResponse = service1.accept(MediaType.APPLICATION_XML).put(ClientResponse.class,<?xml version ='1.0'?>< test> 1< / test>) ;

WebResource service2 = client.resource(http://test.com/post);
WebResource.Builder builder = service2.getRequestBuilder();

(Cookie c:logResponse.getCookies())
{
if(c.getName()。equals(SESSID))
builder = builder .cookie(c);
}

ClientResponse test = builder.accept(MediaType.TEXT_XML).post(ClientResponse.class,<?xml version ='1.0'?>< post& / post>);

我想如果我通过Builder.cookie方法设置一个cookie,



因此,在这种情况下,来自PUT Web服务的Cookie将被设置为POST Web服务。

但是,如果我检查头( logResponse.getHeaders() test.getHeaders() 方法)在两个Web服务之后,第一个PUT Web服务有Cookie但第二个POST Web服务没有任何Cookie。



任何人都可以帮助

解决方案

服务器只设置一次cookie(即只有第一个响应设置为Set -Cookie头)。一旦客户端获取cookie,它应该将其附加到它的请求,但服务器不再在响应中发送cookie。这是正常的行为。



这里是如何编写一个Jersey过滤器,确保它将服务器设置的cookie添加到每个请求: Jersey客户:添加Cookie以请求


I would like to put a cookie from "PUT webservice result" to "POST webservice" by Jersey API.

Here is my code

WebResource service1 = client.resource("http://test.com");

ClientResponse logResponse = service1.accept(MediaType.APPLICATION_XML).put(ClientResponse.class, "<?xml version='1.0'?><test>1</test>");

WebResource service2 = client.resource("http://test.com/post");
WebResource.Builder builder = service2.getRequestBuilder();

for(Cookie c : logResponse.getCookies())
{
if(c.getName().equals("SESSID"))
    builder = builder.cookie(c);
}

ClientResponse test = builder.accept(MediaType.TEXT_XML).post(ClientResponse.class, "<?xml version='1.0'?><post>abc</post>");

I thought If I set a cookie by "Builder.cookie" method, the cookie value will be added on the header of request for POST web service.

So, in this case, the cookie from the PUT web service will be set into POST web service.

However, if I check the header(by logResponse.getHeaders() and test.getHeaders() methods) after two web services, first PUT web service has the Cookie but second POST web service does not have any cookies.

Anybody can help me to keep a cookie between two web services?

解决方案

The server sets the cookie only once (i.e. only the first response has Set-Cookie header). Once the client gets the cookie, it should attach it to it's requests, but the server no longer sends the cookie in the responses. That's normal behavior. So not sure what problem you are trying to solve.

Here is how you can write a Jersey filter that will make sure it adds the cookies set by the server to every request: Jersey Client: Adding Cookies to Request

这篇关于如何把一个cookie在Jersey RESTful webservice?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆