2017-03-15 17 views
2

私はarangodb rest apiとspring-cloud-feignで何らかの種類のリポジトリを構築しようとしています。新規作成なしのArangoDBの作成/更新

Getを実行すると、すべて正常ですが、私はEntityを受け取る必要があります。_keyを私の財産にマップすることもできます。

私の問題は、私は私が新しいオブジェクトを受け取るreturnNewのクエリのparamを追加する場合、作成/更新(ポスト/パッチ)を実行しようとするが、内部新しい

例: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 APIまたはupdate APInewプロパティで新しく作成されたドキュメントを返します。この動作は、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だけを使用します。

関連する問題