RESTEasy Singleton中的CookieParam

时间:2013-09-20 09:53:02

标签: java spring cookies jax-rs resteasy

我以这种方式注入我的cookie参数(使用javax.ws.rs.CookieParam)

@CookieParam( “parameterCookie”) private String parameterCookie;

我有一个问题是使用Resteasy注入该参数

错误

  

将@CookieParam注入单身

是违法的

这是一个BaseResource,我无法修改所有资源以接受所有方法的参数(它花费很多)。我如何在没有修改所有资源的情况下在Resteasy中注入CookieParam?

1 个答案:

答案 0 :(得分:2)

您可以通过注入HttpHeaders来解决此问题:

import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before;
import org.junit.Test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

public class CookieTest {
    static final String COOKIE_NAME = "parameterCookie";

    Dispatcher dispatcher;

    @Before
    public void setUp() throws Exception {
        dispatcher = MockDispatcherFactory.createDispatcher();
        dispatcher.getRegistry().addSingletonResource(new Resource());
    }

    @Test
    public void name_StateUnderTest_ExpectedBehavior() throws Exception {
        String cookieValue = String.valueOf(System.currentTimeMillis());

        MockHttpResponse response = new MockHttpResponse();
        MockHttpRequest request = MockHttpRequest.get("/")
                                    .cookie(COOKIE_NAME, cookieValue);

        dispatcher.invoke(request, response);

        assertThat(response.getContentAsString(), is(COOKIE_NAME + "=" + cookieValue));
    }

    @Path("/")
    public static class Resource {
        @Context HttpHeaders headers;

        @GET @Path("/")
        public String getCookie(){
            return headers.getCookies().get(COOKIE_NAME).toString();
        }
    }
}