我有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是不可能的?如果是的话,我该怎么做?
答案 0 :(得分:17)
是的,这似乎有点奇怪,这是不允许的。不知道为什么不允许这样做。我用Jersey和Resteasy进行了测试。使用Resteasy,所有发生的事情都是没有设置cookie(没有例外)。我想某些操作会将cookie设置为标题,到达过滤器时,不会对cookie进行进一步操作。
我能想到的唯一工作就是自己设置标题
responseContext.getHeaders().add("Set-Cookie", new NewCookie("Hello", "World"));
toString()
的{{1}}将返回它在标题中的显示方式
NewCookie