如何在Java SDK中访问c8y_PropertyType(自定义属性)?

时间:2018-06-29 15:32:38

标签: java sdk cumulocity

我正在使用Cumulocity Java SDK,并且试图访问其中一个ManagedObject中的自定义片段。像这样:

...
"type": "sap_CustomomerLocation",
"c8y_PropertyType":{
    "Customer.Name":{ 
        "name":"customerName", 
        "sap_field_name":{
            "requestIdentifier":"SAP",
            "adressIdentifier":"customerName" 
        }
    },
    "Customer.Address":{ 
        "name":"customerAddress", 
        "sap_field_name":{
            "requestIdentifier":"SAP",
            "adressIdentifier":"customerAddress" 
        }
    }
}
...

我无法更改片段的格式。在Java应用程序中,我通过以下方式获取Mo:

InventoryFilter filter = new InventoryFilter();
filter.byType("sap_CustomomerLocation");

ManagedObjectCollection configuration = platform.getInventoryApi().getManagedObjectsByFilter(filter);
ManagedObjectRepresentation singleConfig = configuration.get().allPages().iterator().next();

Map<String, Object> attrs = singleConfig.getAttrs();

问题是我无法到达“ sap_field_name”,attrs是HashMap @ Node。在IntelliJ的调试器中,当我使用“ evaluateExpression”时,会生成类似的内容:

((HashMap.Node)((HashMap)((HashMap.Node)((HashMap)((HashMap.Node)((HashMap)((HashMap.Node)((HashMap)attrs).entrySet().toArray()[0]).getValue()).entrySet().toArray()[0]).getValue()).entrySet().toArray()[0]).getValue()).entrySet().toArray()[1]).getValue()

那么,您能建议点什么吗?我应该以某种方式将其投放到DTO吗?但是接下来如何处理JSON中的键(“ Customer.Name”,“ Customer.Address”),因为这是一个字段列表,所以可能会更改。

2 个答案:

答案 0 :(得分:1)

我试图在命名空间c8y.PropertyType中创建一个新类,Cumulocity SDK或杰克逊JSON确实找到了一个类,并试图将其映射,但是问题仍然存在于此动态字段中

在对Jackson代码进行少量调试之后,我发现需要为所有自定义字段在正确的命名空间中创建一个类(不幸的是,我不知道名称)。

这是我发现可以接受的解决方法:

ManagedObjectRepresentation singleConfig;

Map<String, Object> attrs = singleConfig.getAttrs();
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.valueToTree(attrs);

String customFieldName = jsonNode.get("c8y_PropertyType").get("attrs").iterator().next().get("sap_field_name").get("adressIdentifier").asText();

答案 1 :(得分:0)

您可以采用的一种方法是为与内容匹配的c8y_PropertyType片段创建模型类。要映射此片段,您需要在包c8y中创建一个PropertyType类,并将其放在类路径中。

然后,JSON解析器将不再生成此HashMap结构,而是生成您的类。我不太确定JSON键中的点是否会引起问题。

如果您需要此类课程的示例,请检查https://bitbucket.org/m2m/cumulocity-clients-java/src/03e47693b1d389308901347d224c13d81250b703/device-capability-model/?at=develop