JAX-RS如何从请求中获取cookie?

时间:2014-05-25 18:53:36

标签: java rest service jax-rs

考虑以下方法:

@POST
@Path("/search")
public SearchResponse doSearch(SearchRequest searchRequest);

我希望此方法能够了解发出请求的用户。因此,我需要访问与用户发送的SearchRequest对象相关联的cookie。

在SearchRequest类中,我只有这个实现:

public class SearchRequest {

      private String ipAddress;
      private String message;
...

这是请求:

{
  "ipAddress":"0.0.0.0",
  "message":"foobarfoobar"
}

在此请求的同时,浏览器会在用户登录系统时发送cookie集。

我的问题是如何在doSearch方法的上下文中访问cookie?

1 个答案:

答案 0 :(得分:10)

您可以在方法的参数上使用javax.ws.rs.CookieParam注释。

@POST
@Path("/search")
public SearchResponse doSearch( 
   SearchRequest searchRequest, 
   @CookieParam("cookieName") Cookie cookie
) {
    //method body
}

此处使用的Cookie课程为javax.ws.rs.core.Cookie,但您不必使用它。

您可以在任何参数上使用此注释,只要:

  1. 是原始类型
  2. Cookie(与上例中相同)
  3. 有一个接受单个String参数的构造函数
  4. 有一个名为valueOffromString的静态方法,它接受一个String参数(例如,参见Integer.valueOf(String)
  5. 有一个ParamConverterProvider JAX-RS扩展SPI的注册实现,它返回一个ParamConverter实例,该实例能够从字符串""转换类型。
  6. List<T>Set<T>SortedSet<T>,其中T满足上述2,3,4或5。生成的集合是只读的。
  7. 这些规则来自documentation of the @CookieParam annotation as implemented in Jersey, the reference implementation of JAX-RS