2017-03-15 80 views
2

我想用arangodb rest api和spring-cloud-feign構建某種類型的存儲庫。ArangoDB創建/更新沒有新

當我執行獲取時,一切都很好,我收到實體,因爲它應該,我甚至可以映射_key到我的財產。

我的問題是,當我嘗試執行創建/更新(後/補丁),如果我添加查詢參數爲returnNew我收到了新的對象,但裏面

如: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 
    ] 
    } 
} 

有沒有辦法送酒店外的新對象?

回答

1

是的,使用create APIupdate API返回new屬性中新創建的文檔。這種行爲就是API記錄的方式,它的介紹就是這樣。所有現有的客戶端驅動程序都是在此規範的基礎上實現的,所以沒有簡單的方法來改變它(即使我們想要)。

new屬性的主要原因是您可以確定文檔是否是新建的。

但是,ArangoDB提供了the Foxx Microservices,因此您可以輕鬆創建自己的API,以您喜​​歡的方式工作。

在一般說明中 - 我們寧願通過Github問題管理功能請求。

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。