【问题标题】:How to send JSONArray through a Rest API如何通过 Rest API 发送 JSONArray
【发布时间】:2019-08-22 23:51:35
【问题描述】:

我需要一些有关 REST API 的帮助。我正在尝试使用 Postman's Body 来通过 API 发送 JSON 数据来测试它。它似乎可以工作,但是当我通过调试代码检查数组时,它说数组的大小为 0。

我正在尝试发送这个:

{
   "data":[
      { 
         "name":"",
         "valor":"",
         "check":"0",
         "ind":"1"
      },
      {
         "name":"",
         "valor":"* FT NPR **",
         "check":"1",
         "ind":"0"
      }
    ]
}

我正在使用 Java EE。我尝试将代码解析为 String,但我不知道是我做错了还是它不起作用。

这是代码:

@GET
@Path("subGroup")
@Produces("application/json")
@Consumes(MediaType.APPLICATION_JSON)
public Response definedSubGrupo(@QueryParam("Us") int US, JSONArray data) 
{
   String Data=UtilClass.definedSubGrupo(data);
   return UtilClass.getReturn(Data);
}

我希望发送完整的 JSON,但实际输出什么都没有 (size=0)。

谢谢。

【问题讨论】:

  • 这里的请求不是 JSONArray - 它是一个 JSONObject,里面有 JSONArray,可以通过“data”属性访问。
  • 更新了如何检索 JSONArray 的示例。见答案。

标签: java arrays json rest api


【解决方案1】:

您在一个 JavaEE 容器上,并且,根据您指定的注释,您是在 JAX-RS 之上构建的。 使用 JAX-RS,您可以将请求正文作为普通的 String

接受
public Response definedSubGrupo(@QueryParam("Us")final int US, final String jsonBody) { ... }

然后,您可以使用市场上可用的库之一(JSON-java、Gson、Jackson 等)将 jsonBodyString 转换为表示 JSON 文档结构的对象。

例如,对于杰克逊,您将拥有

final TreeNode treeNode = objectMapper.readTree(jsonBody);

使用 JSON-Java,您可以拥有

final JSONObject jsonObject = new JSONObject(jsonBody);
final JSONArray data = jsonObject.getJSONArray("data");

到目前为止,您告诉 JAX-RS 的内容基本上是“将请求正文映射到此 JSONArray”。
不幸的是,JSONArray 的类布局似乎与您发送的 JSON 不兼容,因此 JAX-RS 只需创建一个新的“空”实例。

【讨论】:

    【解决方案2】:

    你可以像这样直接传递你的对象列表:

    public Response definedSubGrupo(@QueryParam("Us") int US, List<YourObject> data) 
    

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2019-02-03
      • 2016-09-12
      相关资源
      最近更新 更多