Fiware Scorpio按官方示例向现有实体追加新属性时遇错误求助
Fiware Scorpio: PATCH请求追加新属性报错"attribute not found in original entity"的解决办法
我之前在使用Scorpio的时候也碰到过完全一样的问题,给你梳理下背后的原因和可行的解决办法:
为什么会报错?
这个错误的核心原因是NGSI-LD规范对PATCH /entities/{entityId}/attrs端点的定义就是仅用于更新已存在的属性,而不是添加全新的属性。Scorpio严格遵循了这个规范,所以当你尝试用PATCH操作添加原本不存在的humidity属性时,就会触发这个提示。
官方文档里的"Updating an entity (appending to an entity)"章节容易造成误解——这里的"appending"其实指的是给已有属性的数组类型值追加元素(比如给已存在的connectedSensors数组加新ID),而非添加全新属性。
解决方法
有两种可行的方式来添加新属性:
方法1:改用POST请求
添加新属性的标准方式是使用POST请求调用同一个/entities/{entityId}/attrs端点,修改后的命令如下:
curl localhost:9090/ngsi-ld/v1/entities/house2%3Asmartrooms%3Aroom1/attrs -s -S -X POST -H 'Content-Type: application/json' -H 'Link: https://pastebin.com/raw/Mgxv2ykn' -d @- <<EOF { "humidity": { "value": 34, "unitCode": "PER", "type": "Property", "providedBy": { "type": "Relationship", "object": "smartbuilding:house2:sensor2222" } } } EOF
方法2:给PATCH请求添加options=append参数
如果你因为某些场景必须要用PATCH(比如同时更新已有属性+添加新属性),可以在请求URL后追加options=append查询参数,Scorpio会允许通过PATCH操作添加新属性:
curl localhost:9090/ngsi-ld/v1/entities/house2%3Asmartrooms%3Aroom1/attrs?options=append -s -S -X PATCH -H 'Content-Type: application/json' -H 'Link: https://pastebin.com/raw/Mgxv2ykn' -d @- <<EOF { "humidity": { "value": 34, "unitCode": "PER", "type": "Property", "providedBy": { "type": "Relationship", "object": "smartbuilding:house2:sensor2222" } } } EOF
验证操作是否成功
执行完请求后,可以用GET命令查询实体,确认humidity属性是否已添加:
curl localhost:9090/ngsi-ld/v1/entities/house2%3Asmartrooms%3Aroom1
内容的提问来源于stack exchange,提问作者marendtz
相关产品推荐
相关产品推荐

