对于类型的下一个实例Edm.博客…我考虑过选择ComplexType…虽然我们的博客将是一个相当简单的类型…。与往常一样
本博客是我们为初学者提供的一系列博客的一部分,这些初学者使用SAP云平台SDK进行服务开发(请参阅此处了解信息)
请参阅此处了解先决条件。
在本博客中,我们将了解如果我们的模型包含类型为"complexType"的属性,那么实现是什么样子的
什么是复杂类型?
由于我有限的英语词汇,我只能给出一个简单的解释:
在我的数据模型中,我有一个普通的实体类型,它由几个属性组成。这很正常。E、 我的人有一个财产,这是人的名字。这是一个普通属性,它有一个普通的简单数据类型,它只是一个字符串
现在我对我的数据模型有一个要求:我想存储个人的地址。没问题。我可以简单地继续向Person实体类型添加更多常规属性:添加另一个名为String类型的City属性添加另一个名为String类型的Street属性添加另一个名为StreetNumber的int类型属性Etc
但是最好将这些新的财产分组,因为它们一起构成了这个人的地址。这种分组是通过所谓的复杂类型来实现的在OData中,我们可以定义一个ComplexType并称之为"Address"然后我们将属性添加到ComplexType(City、Street、Number等)
最后,在实体类型中,快速自助建站,我们创建了一个名为"HomeAddress"的属性,而不是Edm.字符串它的类型是"Address",这是前面定义的复杂类型。
这看起来好多了-你不同意吗?
这些简单的解释有帮助吗?更专业的解释是:规范可以在这里找到
如何创建一个项目?请看这里。
在这个博客中,我们终于增强了我们的模型。
我们创建了一个复杂的类型,如上图所示。然后我们在现有的实体类型"Person"中使用它。如上图所示。限定名称必须正确。因此,请确保从定义名称空间的地方复制名称空间。
名称空间被定义为模式的属性:
不再更改(目前)
我们的增强模型如下:
复杂类型本身是如何在java代码中实现的?
是的,因为它是结构化类型,所以它实现为一个映射,就像实体类型一样。是的,实体类型是一个映射,这个映射有一个条目,虚拟主机,它的值是一个(嵌套的)映射?
以下结构视图有帮助吗?
还是你更喜欢这样看:绿色的外部地图代表人物(实体类型),黑色的内部地图代表地址(复杂类型)
好的。
现在让我们把这个结构化视图翻译成Java:
首先我们创建复杂类型地图。这是内部的地图,稍后会用到。
然后我们为"Person"创建一个有"Address"的地图,即使用上面创建的地图的外部地图。
您可以看到createPerson方法是如何改变的,手机免费建站,与以前的博客相比:
属性"HomeAddress"的值是一个映射:
而不是一个简单的字符串。
使用复杂类型创建
我们已经学习了如何实现创建操作。
关于复杂类型的一点注意:
在执行POST请求时,用户必须使用嵌套结构发送负载,因为复杂类型。因此,在云上,在我们的实现中,我们得到了一个嵌套结构:一个映射(对于person)和一个嵌套映射(对于address)。因此,我们可以像往常一样访问外部映射,对于复杂类型,我们可以从外部映射的值得到嵌套映射。
请参阅本博客末尾的完整Java类。一如既往。
一如既往,现在我们可以与maven一起重建,使用Cloud Foundry客户端部署,用浏览器运行
查询复杂类型
首先,我们想看看复杂类型,所以我们调用查询操作。
https://。cfapps.sap.hana文件.ondemand.com/odata/v4/DemoService/People
使用复杂类型的系统查询选项进行查询
这些URL显示如何使用$select进行复杂类型:
您可以将复杂类型本身传递给$select
https:///odata/v4/DemoService/People?$select=HomeAddress
结果显示包含所有属性的完整复杂类型。
更有趣的是只选择复杂类型中的一个属性。语法是使用斜杠:
https:///odata/v4/DemoService/People?$select=HomeAddress/City
因此,只显示城市,其他不显示
下面的URL显示如何将普通属性与嵌套属性结合起来
https:///odata/v4/DemoService/People?$select=Name,HomeAddress/City
这里有一个额外的框,以便您更好地记住$select with和
CREATE with Complex Type
为了发送一个有效的POST请求,大数据治理平台,请求负载应该是这样的
这已经是一个小博客的结尾了。这个博客是关于使用和实现复杂类型的
博客系列和链接集概述。