繁体   English   中英

使用Olingo v2 Java作为PATCH到OData v2服务的客户端

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM