java - 如何在 JAX-RS 中生成具有命名数组和未命名对象的 json?

标签 java json jax-rs resteasy

我正在 JBoss EAP 6.1(Resteasy 2.3.6.Final)中使用 JAX-RS 开发 RESTful Web 服务。我的 Web 服务的响应应该是以下格式的 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;
}

最佳答案

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

3.2. Upgrading Resteasy Within JBoss EAP 6.1

Resteasy is bundled with JBoss EAP 6.1. You will likely have the need to upgrade Resteasy in JBoss EAP 6.1. The Resteasy distribution comes with a zip file called resteasy-jboss-modules-3.0.9.Final.zip. Unzip this file while with the modules/system/layers/base/ directory of the JBoss EAP 6.1 distribution. This will overwrite some of the existing files there.

升级后,对象现在未命名,输出只是 {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 就是我想要的:

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

关于java - 如何在 JAX-RS 中生成具有命名数组和未命名对象的 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197465/

相关文章:

java - 如何从java、mongodb中的dbobject获取属性中的属性

带 GUI 的 Java 结果集 SQL

javascript - 为什么我的 Rails Controller 需要来自 format.js 调用的 JSON?

java - 将 json 转换为对象

java - 在没有 web.xml 文件的 Tomcat Web 应用程序中设置 Spring 配置文件

jersey - 从 JAX-RS 资源内部获取 HTTP URL

java - 如何在 Maven 安装期间抑制 PMD 警告

java - 如何使用 JAVA 将带有 alpha 的 PNG 转换为保留颜色的 JPEG

python - 使用 Python(最好是请求)从 Binance API 获取 Candlestick/Kline 数据以获取 JSON Dat

java - 如何在 ClientErrorException 中向 HTTP 响应添加 header ?