[英]Using Olingo v2 Java as client for PATCH to OData v2 service
我正在尝试使用Olingo提供与OData服务(也用Olingo编写)交互的客户端。 我正在尝试发送补丁。 但是,标准验证例程开始工作了,如果我不包括使用标准Olingo工具标记为不可为空的实体元素,则会出现错误。
在https://olingo.apache.org/doc/odata2/tutorials/OlingoV2BasicClientSample.html中显示:
使用HTTP MERGE / PATCH,也可以仅将要更新的数据作为POST正文发送,而忽略未更改的数据。 但这(当前)未在此示例中显示。
不幸的是,我不确定该如何执行此操作,似乎没有任何地方可以标记到EntityProvider.writeEntry方法中,这是PATCH而不是POST / PUT
EntityProviderWriteProperties properties = EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.build();
// serialize data into ODataResponse object
ODataResponse response = EntityProvider.writeEntry(contentType,
entitySet, data, properties);
此时,在我的代码中,如果“数据”不包含非空字段的条目,则会出现错误。 响应还为不在我的“数据”中的实体的所有属性返回空值。
通过处理响应以删除“标准”生成之后不在我的“数据”中的所有条目,我对此进行了处理,但是可以想象,即使我看不到它,也必须有更好的方法。 关于如何处理这个有什么建议吗?
您必须创建一个“ ExpandSelectTreeNode”,其中仅包含要序列化的所选属性的名称。 假设您的数据是带有值的HashMap,则可以使用以下代码作为示例,从以下内容开始:
// data = new HashMap<>();
ExpandSelectTreeNode node = ExpandSelectTreeNode.entitySet(entitySet)
.selectedProperties(new ArrayList<String>(data.keySet())).build();
EntityProviderWriteProperties properties = EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.expandSelectTree(node)
.build();
// serialize data into ODataResponse object
ODataResponse response = EntityProvider.writeEntry(contentType,
entitySet, data, properties);
最好的祝福
内容类型是否来自客户端application / json-patch + json?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.