InventoryApi 结果的对象的更新功能。
在我的代码中,我成功地使用了update(),然后尝试使用更新返回的(例如,设置一些片段),再次调用InventoryApi.update()。
调用它时,我得到一个带有消息的错误代码422:
以下字段不可更新: lastUpdated
这是因为以前返回的对象具有该字段集,REST并不期望该字段具有一个值。
现在来问我的问题:在com.cumulocity.rest.representation.inventory.ManagedObjectRepresentation类中,我看到lastUpdated字段(第36行)对于某些“操作”有一个@Null注释。

我对此的松散解释是,在SDK中的某个地方,如果将该对象用作创建或更新操作的一部分,则该字段应该为null。如果是这样的话,使用具有此字段集的ManagedObjectRepresentation的上述update()调用应该不会造成问题。事实并非如此。
这个@Null注释的实际用途是什么?我是不是错误地使用了SDK?我知道使请求正常工作的一种方法就是将lastUpdated字段设置为null,但我认为这就是@Null注释的目的。
使用Java客户端库版本8.13。
发布于 2018-05-24 09:14:14
这些@Null注释用于验证服务器端的传入对象。正如您所写的,对于列出的操作,参数必须为null。在其他API中也使用了类似的@NotNull注释。
InventoryApi或其他Java类不计算这些注释。参数不会自动设置为空。
通常,我建议只使用要更新的属性更新对象,并排除未更改的属性。这样可以避免与同一对象上的其他并行更新发生冲突。
发布于 2018-05-24 09:29:00
不,您使用SDK的方式是正确的。正如您所提到的,set the lastUpdated field to null是更新managedObjectRepresentation的唯一方法。这是因为lastUpdated时间只是由累积量来设置的,而不是由用户(开发人员)设置的(我认为用户可能会给出太远的日期时间,这就是他们不允许设置更新时间的原因)。
在回答你的问题时:
更新托管对象表示的方法是: Conside mo是managedObject表示
mo.setName("String Name");//you can set whatever you want
mo.setLastUpdated(null);// without lastupdated you cannot update mo
platform.getInventoryApi().update(mo);而use @NULL注释是:
在本例中,您将LastUpdated设置为null,这将抛出空指针异常以捕获异常(克服异常) @null注释。
有关@null 看这里的更多信息
https://stackoverflow.com/questions/50504632
复制相似问题