java - 在一个 Olingo 属性中显示多个值

标签 java odata olingo

很抱歉,如果已经有人问过这个问题。我还没有找到答案。我有一个 oData v4 API,它根据从我公司的内部 Web 服务获取的 json 字符串构建 Olingo 实体集合。我还可以获取单个记录的 json,这样我就可以实现 readEntityCollection 和 readEntity。因此,我采用 json 字符串并构建一个实体,并将其发送到 Olingo 以在 Java 中进行序列化。所以,我无法访问后端的关系数据库。我只能使用该第 3 方系统返回给我的 JSON 字符串。我得到的 JSON 字符串是这样的。请注意,order_items 也是 JSON 格式。

{
    "id": 4703,
    "order_number": "123",
    "order_items": "[{"item_no":"1334","item_name":"Widget 1"},{"item_no":"1334","item_name":"Widget 2"}]"
}

这很简单,只需将 order_items 按原样显示为 string 属性,这是一个很大的 JSON 字符串。但我希望能够将 order_items json 数组字符串传递给预定义的 OData 属性。因为如果我添加 $format=xml 选项,即使其他所有内容都在 XML 中,它仍然会显示 order_items 的 json 字符串。所以我的问题是,我可以转换 json 数组(从字符串)并将其传递给预定义的 preoperty。 (即 CsdlProperty)我希望我说得有道理。

谢谢

最佳答案

好的,我找到了我需要的东西。我真正需要做的是为“order_items”创建一个可以容纳多种复杂类型的集合属性。换句话说,复杂类型的集合,每个复杂类型都有多个复杂值。

1。我在 getEntityType() 中创建了一个新的集合类型,用于保存我的复杂类型:

final List<CsdlProperty> result = new ArrayList<CsdlProperty>();
CsdlProperty property = new CsdlProperty() // Complex types
.setName("order_items")
.setType(CT_ORDER_ITEMS.getFullQualifiedNameAsString())
.setNullable(true)
.setCollection(true);
result.add(property);

2。在我的 readEntity() 实现中,我创建了一个复杂的集合属性并用值填充它:

List<ComplexValue> complexCollection = new ArrayList<ComplexValue>();
ComplexValue complexValue = new ComplexValue();
complexValue.getValue().add(new Property(null, "item_no", ValueType.PRIMITIVE, itemNo));
complexValue.getValue().add(new Property(null, "item_name", ValueType.PRIMITIVE, itemName));
...etc
complexCollection.add(complexValue);
Property orderItems = new Property();
orderItems = new Property(null, "order_items", ValueType.COLLECTION_COMPLEX, complexCollection);
...now serialize and send response

Olingo 负责剩下的事情。感谢那些回答的人。如果有人需要进一步的帮助,请给我发消息。

关于java - 在一个 Olingo 属性中显示多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59042179/

相关文章:

java - 如何使用多线程查找数字范围的总和?

c# - 测量 OData 响应的输出

java - 如何禁用 oData API 的 HTTP POST REQUEST?

java - Odata 与 Olingo 或 Odata4j

c# - 将 Odata 查询参数添加到 @html.Routelink

java - 尝试连接到数据市场返回异常

etl - icCube - 为 ODATA 开发一个 java 插件,如何调试服务器连接?

java - J老板 : WAR file in EAR can't find JAR library on classpath

java - 将参数传递给 JavascriptExecutor 的正确方法是什么?

java - 为什么我无法对内存数据库进行回滚?