泽西岛:我可以在ContainerResponseFilter中添加一个cookie吗?

Dav*_*ams 10 cookies jax-rs jersey servlet-filters

我有一个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));
}
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

Caused by: java.lang.UnsupportedOperationException: null
    at java.util.AbstractMap.put(AbstractMap.java:203) ~[na:1.7.0_67]
Run Code Online (Sandbox Code Playgroud)

在这里设置cookie是不可能的?如果是的话,我该怎么做?

Pau*_*tha 17

是的,这似乎有点奇怪,这是不允许的.不知道为什么不允许这样做.我用Jersey和Resteasy进行了测试.使用Resteasy,所有发生的事情都是没有设置cookie(没有例外).我认为某些操作会将cookie设置为标题,到达过滤器时,不会对cookie进行进一步操作.

我能想到的唯一工作就是自己设置标题

responseContext.getHeaders().add("Set-Cookie", new NewCookie("Hello", "World"));
Run Code Online (Sandbox Code Playgroud)

toString()NewCookie将返回它应该如何看的头

Set-Cookie: Hello=World;Version=1
Run Code Online (Sandbox Code Playgroud)