如何确定Java AWS CDK中software.amazon.jsii.JsiiObject的底层AWS CDK类型?
在AWS CDK中,每个JsiiObject都被转换成一个AWS CDK类型,比如AWS::EC2::SecurityGroupIngress
例如,AWS CDK中的方法getSecurityGroupIngress()返回一个在以下代码中转换为( JssiObject )的列表。但是,正如文档所建议的那样,Object中返回的类型,我不清楚包含在对象中的JssiObject所代表的AWS CDK类型。
CfnSecurityGroup cfnSecurityGroup = (CfnSecurityGroup) resource_SecurityGroup.getCfnresource();
if (cfnSecurityGroup.getSecurityGroupIngress() != null) {
List<CfnSecurityGroupIngress> cfnSecurityGroupIngress = (List<CfnSecurityGroupIngress>) cfnSecurityGroup.getSecurityGroupIngress();您如何确定JsiiObject的AWS CDK类型?
Maven
<dependency>
<groupId>software.amazon.awscdk</groupId>
<artifactId>cdk-cloudformation-include</artifactId>
<version>1.79.0</version>
</dependency>问候Conteh
发布于 2021-01-06 00:15:34
这在某些情况下会起作用,比如上面的例子,但是一些JsiiObject不容易转换成JsonNode,因为它们可能表示一个列表,所以尽管它可能有所帮助,但它可能不是最好的答案。
public void PrintObjectAsJson(Object obj) throws IOException {
JsiiObject J = (JsiiObject) obj;
JsonNode jsonNode = (JsonNode) J.$jsii$toJson();
ObjectMapper mapper = new ObjectMapper();
Object json = mapper.readValue(jsonNode.toString(), Object.class);
LOG.debug(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));
}在上面的例子中
CfnSecurityGroup cfnSecurityGroup = (CfnSecurityGroup) resource_SecurityGroup.getCfnresource();
if (cfnSecurityGroup.getSecurityGroupIngress() != null) {
List<Object> cfnSecurityGroupIngress
= (List<Object>) cfnSecurityGroup.getSecurityGroupIngress();
ListIterator<Object> it = cfnSecurityGroupIngress.listIterator();
while (it.hasNext()) {
Object obj = it.next();
PrintObjectAsJson(obj);这将输出以下内容,告诉我们该对象的接口AWS CDK类型为CfnSecurityGroup.IngressProperty
{
"$jsii.byref" : "Object@10016",
"$jsii.interfaces" : [ "@aws-cdk/aws-ec2.CfnSecurityGroup.IngressProperty" ]
}https://stackoverflow.com/questions/65569859
复制相似问题