使用Olingo v2 Java作为OData v2服务补丁的客户端

使用Olingo v2 Java作为OData v2服务补丁的客户端,java,odata,olingo,Java,Odata,Olingo,我正试图使用Olingo来提供一个与OData服务交互的客户端(也是用Olingo编写的)。我正试图发送一个补丁。但是,标准的验证例程正在启动,如果我没有包含使用标准Olingo工具标记为不可为空的实体元素,我会得到一个错误 信中说: 使用HTTP合并/修补程序,也可以只将要更新的数据作为POST正文发送,而忽略未更改的数据。但(目前)此示例中未显示这一点 不幸的是,我不知道如何做到这一点,似乎没有任何地方可以向EntityProvider.writeEntry方法标记它是一个补丁而不是POST

我正试图使用Olingo来提供一个与OData服务交互的客户端(也是用Olingo编写的)。我正试图发送一个补丁。但是,标准的验证例程正在启动,如果我没有包含使用标准Olingo工具标记为不可为空的实体元素,我会得到一个错误

信中说:

使用HTTP合并/修补程序,也可以只将要更新的数据作为POST正文发送,而忽略未更改的数据。但(目前)此示例中未显示这一点

不幸的是,我不知道如何做到这一点,似乎没有任何地方可以向EntityProvider.writeEntry方法标记它是一个补丁而不是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”,它只包含要序列化的选定属性的名称。 假设您的数据是具有值的哈希映射,您可以使用以下代码作为示例开始:

// 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);
//data=newhashmap();
ExpandSelectTreeNode=ExpandSelectTreeNode.entitySet(entitySet)
.selectedProperties(新建ArrayList(data.keySet()).build();
EntityProviderWriteProperties属性=EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.expandSelectTree(节点)
.build();
//将数据序列化为ODataResponse对象
ODataResponse response=EntityProvider.writeEntry(contentType,
实体集、数据、属性);
致意

您必须创建一个“ExpandSelectTreeNode”,其中只包含要序列化的选定属性的名称。 假设您的数据是具有值的哈希映射,您可以使用以下代码作为示例开始:

// 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);
//data=newhashmap();
ExpandSelectTreeNode=ExpandSelectTreeNode.entitySet(entitySet)
.selectedProperties(新建ArrayList(data.keySet()).build();
EntityProviderWriteProperties属性=EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.expandSelectTree(节点)
.build();
//将数据序列化为ODataResponse对象
ODataResponse response=EntityProvider.writeEntry(contentType,
实体集、数据、属性);
致意

您必须创建一个“ExpandSelectTreeNode”,其中只包含要序列化的选定属性的名称。 假设您的数据是具有值的哈希映射,您可以使用以下代码作为示例开始:

// 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);
//data=newhashmap();
ExpandSelectTreeNode=ExpandSelectTreeNode.entitySet(entitySet)
.selectedProperties(新建ArrayList(data.keySet()).build();
EntityProviderWriteProperties属性=EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.expandSelectTree(节点)
.build();
//将数据序列化为ODataResponse对象
ODataResponse response=EntityProvider.writeEntry(contentType,
实体集、数据、属性);
致意

您必须创建一个“ExpandSelectTreeNode”,其中只包含要序列化的选定属性的名称。 假设您的数据是具有值的哈希映射,您可以使用以下代码作为示例开始:

// 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);
//data=newhashmap();
ExpandSelectTreeNode=ExpandSelectTreeNode.entitySet(entitySet)
.selectedProperties(新建ArrayList(data.keySet()).build();
EntityProviderWriteProperties属性=EntityProviderWriteProperties
.serviceRoot(rootUri).omitJsonWrapper(true).contentOnly(true)
.expandSelectTree(节点)
.build();
//将数据序列化为ODataResponse对象
ODataResponse response=EntityProvider.writeEntry(contentType,
实体集、数据、属性);

最好的问候是来自客户端应用程序的contenttype/json patch+json?

是来自客户端应用程序的contenttype/json patch+json?

是来自客户端应用程序的contenttype/json patch+json?

是来自客户端应用程序的contenttype/json patch+json?

非常有效,比我所做的JSON制作后的操作要好得多。非常感谢。但愿我能在Olingo doco中找到它。它工作得非常完美,比我所做的JSON后期制作操作要好得多。非常感谢。但愿我能在Olingo doco中找到它。它工作得非常完美,比我所做的JSON后期制作操作要好得多。非常感谢。但愿我能在Olingo doco中找到它。它工作得非常完美,比我所做的JSON后期制作操作要好得多。非常感谢。但愿我能在Olingo doco中找到这一点。对于json文档,客户端发送的有效负载的内容类型在OData V2中始终为“application/json”。对于json文档,客户端发送的有效负载的内容类型在OData V2中始终为“application/json”。对于json文档,客户端发送的有效负载的内容类型始终为“application/json”对于json文档,ODatav2中的“application/json”。对于json文档,ODatav2中客户端发送的有效负载的内容类型始终为“application/json”。