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

use*_*948 7 java rest service jax-rs

请考虑以下方法:

@POST
@Path("/search")
public SearchResponse doSearch(SearchRequest searchRequest);
Run Code Online (Sandbox Code Playgroud)

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

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

public class SearchRequest {

      private String ipAddress;
      private String message;
...
Run Code Online (Sandbox Code Playgroud)

这是请求:

{
  "ipAddress":"0.0.0.0",
  "message":"foobarfoobar"
}
Run Code Online (Sandbox Code Playgroud)

除了此请求,浏览器还会在用户登录系统时发送cookie集.

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

ton*_*edz 10

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

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

Cookie这里使用的类是javax.ws.rs.core.Cookie你不必使用它.

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

  1. 是一种原始类型
  2. Cookie(与上例相同)
  3. 有一个接受一个String参数的构造函数
  4. 有一个名为valueOffromString接受单个String参数的静态方法(例如,参见Integer.valueOf(String))
  5. 有一个ParamConverterProviderJAX-RS扩展SPI 的注册实现,它返回一个ParamConverter能够为该类型进行"from string"转换的实例.
  6. List<T>,Set<T>或者SortedSet<T>,T满足上面的2,3,4或5.生成的集合是只读的.

这些规则来自Jersey中实现@CookieParam注释文档,这是JAX-RS的参考实现