繁体   English   中英

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

[英]JAX-RS How to get a cookie from a request?

请考虑以下方法:

@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?

您可以在方法的参数上使用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实例,该实例能够为该类型进行“from string”转换。
  6. Be List<T>Set<T>SortedSet<T> ,其中T满足上面的2,3,4或5。 生成的集合是只读的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM