【问题标题】:Pass array as parameter to JAX-RS resource将数组作为参数传递给 JAX-RS 资源
【发布时间】:2011-07-25 22:44:34
【问题描述】:

我有很多参数要使用 JAX-RS 传递给服务器。

有没有办法通过 URL 或 AarryList 传递?

【问题讨论】:

  • 是否有可能从客户端我们将参数作为 xml 作为 PUT 方法发送,而在服务器端我们可以使用 JAXBElement 接收它(包装为对象)

标签: arrays jax-rs parameter-passing


【解决方案1】:

这里有几个选项。

选项 1:具有多个值的查询参数

可以为单个查询参数提供多个简单值。例如,您的查询字符串可能如下所示:

PUT /path/to/my/resource?param1=value1&param1=value2&param1=value3

这里的请求参数param1 有三个值,容器将允许您以数组的形式访问所有三个值(参见Query string structure)。

选项 2:在 PUT 正文中提供复杂数据

如果您需要在 PUT 请求中提交复杂的数据,这通常通过在请求正文中提供该内容来完成。当然,这个payload可以是xml(通过JAXB绑定)。


记住 URI 的重点是识别资源 (RFC 3986, 3.4),如果这个值数组是识别资源所需的数据,那么 URI 是一个很好的地方。另一方面,如果此数据数组构成了在此 PUT 请求中提交的新表示的一部分,则它属于请求正文。

话虽如此,除非您真的只需要一组简单值,否则我建议选择选项 2。我想不出在 URL 中使用 URL 编码 XML 的充分理由,但我' d 有兴趣详细了解这些数据到底是什么。

【讨论】:

    【解决方案2】:

    我们可以将Query参数和对应的值作为一个Map来获取,

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public void test(@Context UriInfo ui) {
        MultivaluedMap<String, String> map = ui.getQueryParameters();
        String name = map.getFirst("name");
        String age = map.getFirst("age");
        System.out.println(name);
        System.out.println(age);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2015-12-09
      • 2019-03-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      相关资源
      最近更新 更多