2

我正在尝试使用 arangodb rest api 和spring-cloud- feign 构建某种存储库。

当我执行 Get 时,一切都很好,我收到了应有的实体,我什至可以将_key映射到我的属性。

我的问题是当我尝试执行创建/更新(发布/补丁)时,如果我为returnNew添加查询参数,我会收到新对象,但在new中。

例如:http://localhost:8529/_db/testDB/_api/document/orderCollection?returnNew=true

{
  "_id": "orderCollection/ERGDEF34",
  "_key": "ERGDEF34",
  "_rev": "_UqhLPC----",
  "new": {
    "_key": "ERGDEF34",
    "_id": "orderCollection/ERGDEF34",
    "_rev": "_UqhLPC----",
    "description": "descriptionxpto",
    "amount": "5000000000000",
    "operation": {
      "id": "1",
      "description": "operation description",
      "status": "Completed"
    },
    "creationDate": [
      2017,
      3,
      13,
      15,
      23,
      1,
      546000000
    ]   
  }
}

有没有办法将新对象发送到新属性之外

4

2 回答 2

1

是的,使用创建 API更新 APInew在属性中返回新创建的文档。这种行为是 API 被记录的方式,它的意图就是这样。所有现有的客户端驱动程序都是在这个规范之上实现的,所以没有简单的方法来改变它(即使我们想要)。

该属性的主要原因new是您可以找出文档是否是新的。

但是,ArangoDB 提供Foxx微服务,因此您可以轻松创建自己的 API,以您喜​​欢的方式工作。

总的来说,我们宁愿通过 Github 问题管理功能请求。

于 2017-04-21T14:25:35.293 回答
0

**编辑:刚刚注意到您正在使用 Rest API。如果您使用 Java(如标记),为什么不直接使用 Java 驱动程序?无论如何,您仍然可以创建一个抽象来处理用例。

你应该在你的数据访问层中处理这个(你已经抽象了,对吧?)

这就是我目前这样做的方式:

界面:

public interface DataAccess {

    public <T extends BaseEntity> T update(T entity, Class<T> c) throws DataException;

}

执行:

public class DataAccessImpl implements DataAccess {

    private ArangoDB arangoDB; 

    public DataAccessImpl(String database) {
        this.database = database;
        arangoDB = ArangoBuilderService.getInstance().getArangoDB();
    }

    public <T extends BaseEntity> T update(T entity, Class<T> c) throws DataException {
        try {
            String key = ((BaseEntity)entity).getKey();
            DocumentUpdateEntity<T> value = arangoDB.db(database).collection(c.getSimpleName().toLowerCase()).updateDocument(key, entity);
            return (T) value.getNew(); // TODO: better error handling
        } catch(ArangoDBException e){
            throw new DataException(e.getMessage(), e);
        }
    }

}

用法:

DataAccess db = new DataAccessImpl(tenant);
User user = db.getByKey("userkey", User.class);
db.update(user, User.class);

这样,您就可以抽象出所有小细节,只使用 POJO。

于 2017-08-12T14:11:44.920 回答