gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:23:51 25 4
gpt4 key购买 nike

很抱歉,如果已经有人问过这个问题。我还没有找到答案。我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com