0

InventoryApi的更新函数返回结果的ManagedObjectRepresentation对象

在我的代码中,我成功地使用了update(),然后尝试更新返回的ManagedObjectRepresentation(例如设置一些片段),再次调用 InventoryApi.update()。

调用这个,我得到一个错误代码 422 和消息:

以下字段不可更新:lastUpdated

这是因为先前返回的对象具有该字段集,REST API 不希望该字段具有值。

现在是我的问题:查看com.cumulocity.rest.representation.inventory.ManagedObjectRepresentation类,我看到lastUpdated字段(第 36 行)有一个用于某些“操作”的@Null注释。

ManagedObjectRepresentation Java 类

我对此的松散解释是,在 SDK 的某个地方,如果此对象用作 CREATE 或 UPDATE 操作的一部分,则该字段应为空。如果是这种情况,我上面的update()调用带有一个设置了这个字段的 ManagedObjectRepresentation,应该不会导致问题。不是这种情况。

这个@Null 注解的实际用途是什么?我是否错误地使用了 SDK?我知道使请求工作的一种方法是将 lastUpdated 字段设置为 null,但我认为这是@Null -annotation 的目的。

使用 Java 客户端库版本 8.13。

4

2 回答 2

0

评估这些 @Null 注释以验证服务器端的传入对象。如您所写,列出的操作的参数必须为空。其他 API 上也使用了类似的 @NotNull 注释。

InventoryApi 或其他 Java API 类不评估这些注释。参数不会自动设置为空。

一般来说,我建议仅使用要更新的属性来更新对象,并排除未更改的属性。这避免了与同一对象上的其他并行更新发生冲突。

于 2018-05-24T09:14:14.943 回答
0

不,您以正确的方式使用 SDK。正如您所提到 set the lastUpdated field to null的,这是更新 managedObjectRepresentation 的唯一方法。这是因为 lastUpdated 时间仅由累积而不是由用户(开发人员)设置(我认为用户可能将日期时间设置得太远,这就是他们不允许设置更新时间的原因)。

来到你的问题:

更新托管对象表示的方法是:考虑mo是您的托管对象表示

        mo.setName("String Name");//you can set whatever you want
        mo.setLastUpdated(null);// without lastupdated you cannot update mo
        platform.getInventoryApi().update(mo);

而使用@NULL注解是:

在这个工作案例中,您将 LastUpdated 设置为 null 这将引发空指针异常以捕获异常(从异常中克服)使用 @null 注释。

有关@null 的更多信息,请参见此处

于 2018-05-24T09:29:00.107 回答