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

时间:2015-10-29 13:23:06

标签: java odata olingo

我正在尝试使用Olingo来提供与OData服务交互的客户端(也用Olingo编写)。我正在尝试发送PATCH。但是,标准验证例程正在进行中,如果我不包含使用标准Olingo工具标记为不可空的实体元素,则会出现错误。

https://olingo.apache.org/doc/odata2/tutorials/OlingoV2BasicClientSample.html

说:

  

使用HTTP MERGE / PATCH,还可以仅将要更新的数据作为POST Body发送,并省略未更改的数据。但这(目前)未在此样本中显示。

不幸的是我不知道如何做到这一点,在那里,似乎没有任何标记到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);

在我的代码中,如果“data”不包含我的非可空字段的条目,则会出现错误。响应还为实体的所有属性返回空值,这些属性不在我的“数据”中。

我通过操纵响应来处理这个问题,以便在“标准”生成之后删除不在我的“数据”中的所有条目,但是想象一下,即使我看不到它,也必须有更好的方法。有关如何处理这个的任何建议?

2 个答案:

答案 0 :(得分:3)

You have to create an "ExpandSelectTreeNode" which contains only the name of the selected properties to be serialized. Assuming that your data is a HashMap with the values you can use following code as an example to start from: // 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); Best Regards

答案 1 :(得分:0)

来自客户端应用程序的内容类型/ json-patch + json?