首页 文章

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

提问于
浏览
1

我正在使用JBoss EAP 6.1中的JAX-RS开发RESTful Web服务(Resteasy 2.3.6.Final) . 我的webservice的响应应该是以下格式的JSON:

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

   {
    "field1", "Value4"
    "field2", "value5"
    "field3", "value6"
   }
 ]
}

但是,Jackson和Jettison提供商都将我的对象列表转换如下:

[
  {"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;
}

1 回答

  • 0

    为了解决我的问题,我将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: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是我想要的:

    {"myArrayName": [
      {
    "field1": "value1"
    "field2", "value2"
      },
      {
    "field1", "Value4"
    "field2", "value5"
      }
     ]
    }
    

相关问题