【问题标题】:How can I grab all query parameters in Jersey JaxRS?如何获取 Jersey JaxRS 中的所有查询参数?
【发布时间】:2011-04-19 15:09:55
【问题描述】:

我正在构建一个通用 Web 服务,需要将所有查询参数抓取到一个字符串中以供以后解析。我该怎么做?

【问题讨论】:

    标签: java jersey jax-rs


    【解决方案1】:

    您可以通过@QueryParam("name") 访问单个参数或通过上下文访问所有参数:

    @POST
    public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
         MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
         String nameParam = queryParams.getFirst("name");
    }
    

    密钥是@Contextjax-rs annotation,可以用来访问:

    UriInfo、请求、HttpHeaders、 安全上下文,提供者

    【讨论】:

    • 我们可以和 GET 一起使用吗?
    【解决方案2】:

    请求URI中未解析的查询部分可以从UriInfo对象中获取:

    @GET
    public Representation get(@Context UriInfo uriInfo) {
      String query = uriInfo.getRequestUri().getQuery();
      ...
    }
    

    【讨论】:

      【解决方案3】:

      为已接受的答案添加更多内容。也可以通过以下方式获取所有查询参数,而无需向方法添加额外的参数,这在维护 swagger 文档时可能很有用。

      @Context
      private UriInfo uriInfo;
      
      @POST
      public Response postSomething(@QueryParam("name") String name) {
           MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
           String nameParam = queryParams.getFirst("name");
      }
      

      ref

      【讨论】:

      • 虽然这可行,但我不推荐它。如果您可以保持代码功能纯正,那么您应该尝试一下——这是更好的方法。
      • 虽然严格正确,但我将这种方法与超类一起使用来自动记录参数,并且效果非常好。比每次请求都传递参数要干净得多。有时,功能纯度需要只看另一边几秒钟,而实用编程控制键盘:)
      【解决方案4】:

      我们可以使用查询参数将值客户端发送到服务器

      http://localhost:8080/JerseyDemo/rest/user/12?p=10
      

      这里 p 是查询参数值。我们可以使用@QueryParam("p") 注解来获取这个值

      public adduser(@QueryParam("p") int page){
        //some code 
      }
      

      有时我们会在查询参数中发送值列表,例如

      http://localhost:8080/JerseyDemo/rest/user/12?city=delhi&country=india&city=california
      

      在这种情况下,我们可以使用@Context UriInfo 检索所有查询参数

      public String addUser( @Context UriInfo uriInfo){
              List<String> cityList = uriInfo.getQueryParameters().get("city");
      
       }
      

      您可以查看包含更多详细信息的完整示例 - QueryParam Annotation In Jersey 在这里您将看到更多其他在球衣中检索查询参数的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        • 2018-10-07
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多