Jersey:我可以在 ContainerResponseFilter 中添加 cookie 吗?
Jersey: Can I add a cookie in ContainerResponseFilter?
我有一个 ContainerResponseFilter
,我尝试在其中设置一个 cookie,如下所示:
@Override
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
String cookieName = "ExampleCookie";
String cookieValue = "SomeData";
logger.info("Setting cookie " + cookieName + " with value " + cookieValue + " into cookies " + JsonUtils.objectToJson(containerResponseContext.getCookies()));
containerResponseContext.getCookies().put(cookieName, new NewCookie(cookieName, cookieValue));
}
但这给出了以下错误:
Caused by: java.lang.UnsupportedOperationException: null
at java.util.AbstractMap.put(AbstractMap.java:203) ~[na:1.7.0_67]
这里不能设置cookie?如果是,我该怎么做?
是的,这是不允许的,这似乎有点奇怪。不知道为什么不允许这样做。我已经使用 Jersey 和 Resteasy 进行了测试。使用 Resteasy,所发生的只是未设置 cookie(没有例外)。我在想一些操作将 cookie 设置为 headers,并且在达到过滤器时,没有对 cookie 进行进一步的操作。
我能想到的唯一解决方法是自己简单地设置 header
responseContext.getHeaders().add("Set-Cookie", new NewCookie("Hello", "World"));
NewCookie
的 toString()
将 return 它在 header
中的外观
Set-Cookie: Hello=World;Version=1
我有一个 ContainerResponseFilter
,我尝试在其中设置一个 cookie,如下所示:
@Override
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
String cookieName = "ExampleCookie";
String cookieValue = "SomeData";
logger.info("Setting cookie " + cookieName + " with value " + cookieValue + " into cookies " + JsonUtils.objectToJson(containerResponseContext.getCookies()));
containerResponseContext.getCookies().put(cookieName, new NewCookie(cookieName, cookieValue));
}
但这给出了以下错误:
Caused by: java.lang.UnsupportedOperationException: null
at java.util.AbstractMap.put(AbstractMap.java:203) ~[na:1.7.0_67]
这里不能设置cookie?如果是,我该怎么做?
是的,这是不允许的,这似乎有点奇怪。不知道为什么不允许这样做。我已经使用 Jersey 和 Resteasy 进行了测试。使用 Resteasy,所发生的只是未设置 cookie(没有例外)。我在想一些操作将 cookie 设置为 headers,并且在达到过滤器时,没有对 cookie 进行进一步的操作。
我能想到的唯一解决方法是自己简单地设置 header
responseContext.getHeaders().add("Set-Cookie", new NewCookie("Hello", "World"));
NewCookie
的 toString()
将 return 它在 header
Set-Cookie: Hello=World;Version=1