Java 如何在JAX-RS中使用命名数组和未命名对象生成json?

Java 如何在JAX-RS中使用命名数组和未命名对象生成json?,java,json,jax-rs,resteasy,Java,Json,Jax Rs,Resteasy,我正在JBoss EAP 6.1 Resteasy 2.3.6.Final中使用JAX-RS开发一个RESTful web服务。my webservice的响应应为以下格式的JSON: {"arrayName": [ { "field1": "value1" "field2", "value2" "field3", "value3" }, { "field1", "Value4" "field2", "value5" "fiel

我正在JBoss EAP 6.1 Resteasy 2.3.6.Final中使用JAX-RS开发一个RESTful web服务。my webservice的响应应为以下格式的JSON:

{"arrayName": [
   {
    "field1": "value1"
    "field2", "value2"
    "field3", "value3"
   },

   {
    "field1", "Value4"
    "field2", "value5"
    "field3", "value6"
   }
 ]
}
但是,Jackson和抛弃提供者都将我的对象列表转换为以下内容:

[
  {"myObjectName":
    {
      "field1":"value1",     
      "field2":"value2",     
      "field3":"value3",     
    }
  },

  {"myObjectName":
    {
      "field1":"value4",     
      "field2":"value5",     
      "field3":"value6",     
    }
  },    
]
我希望我的数组有一个名称,而数组中的元素没有名称

我使用Map和Array获得了预期的结果,但这似乎是一个糟糕的解决方案

有人能告诉我如何使用JAX-RS/Resteasy的最佳特性以更优雅的方式获得这个结果吗

代码如下所示:

@GET
@Path("/myPath")
@Produces(MediaType.APPLICATION_JSON)
public MyObject[] myPathJson() {
  MyObject[] myObjectArray = new MyObject[3];
  myObjectArray[0]=new MyObject();
  myObjectArray[1]=new MyObject();
  myObjectArray[2]=new MyObject();

  return myObjectArray;
}

为了解决我的问题,我将Resteasy的版本从2.3.6.Final升级到3.0.9.Final。官方文件解释了如何做到这一点:

3.2。在JBoss EAP 6.1中升级Resteasy

Resteasy与JBoss EAP 6.1捆绑在一起。您可能需要在JBoss EAP 6.1中升级Resteasy。Resteasy发行版附带一个名为Resteasy-jboss-modules-3.0.9.Final.zip的zip文件。使用JBoss EAP 6.1发行版的modules/system/layers/base/目录解压缩此文件。这将覆盖其中的一些现有文件

升级后,对象现在没有命名,输出只是{field1:value1}

要命名数组,请使用映射:map.put arrayName arrayObjects

@GET
@Path("/myPath")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, MyObject[]> myPathJson() {
   MyObject[] myObjectArray = new MyObject[3];
   myObjectArray[0]=new MyObject();
   myObjectArray[1]=new MyObject();
   myObjectArray[2]=new MyObject();

    Map<String, MyObject[]> namedArray = new HashMap<String, MyObject[]>();
    namedArray.put("myArrayName", myObjectArray);

    return namedArray;
}

第一个列表不是有效的json。您确定这是您想要的渲染方式。请尝试将其包装到对象中。顺便说一句,它是有效的json。如果它不起作用,您可能想尝试genson lib。我将Resteasy的版本更新为3.0.9.Final,我的问题解决了:现在没有命名对象,输出只是{field1:value1}。要命名数组,请使用映射:map.put arrayName arrayObjects。因此,输出是我想要的。
{"myArrayName": [
  {
"field1": "value1"
"field2", "value2"
  },
  {
"field1", "Value4"
"field2", "value5"
  }
 ]
}