2017-03-15 5 views
2

これは、要素のリストを含むオブジェクトの更新に問題があります。私のオブジェクト定義:SpringデータRest + SpringデータMongo - オブジェクトのリストの要素の数値を更新することができません

public class Project { 
    private String _id; 
    private String name; 
    private List<Pair> config; 
} 

ペアオブジェクト:

public class Pair { 
    private String key; 
    private String value; 
} 

私は残りのAPIを提供するために、春の休憩のリポジトリを使用している、すべてがMongoDBの中に保存されています。私は適切な応答を持っていると、オブジェクトが作成されている

{ 
    "name": "test_project", 
    "config": [{ 
    "key": "port", 
    "value": "12" 
    },{ 
    "key": "port2", 
    "value": "123" 
    }] 
} 

:ちょうど私は(/プロジェクトに送信POST)JSONでプロジェクトオブジェクトを作成するとmongoRepository

@RepositoryRestResource(collectionResourceRel = "project", path = "projects") 
    public interface ProjectRepository extends MongoRepository<Project, String>{ 
     Project findByName(String name); 
    } 

を作成するために、シンプルなインターフェイスを使用しました:

{ 
    "_id": "58c916fad76a3a186731ad28", 
    "name": "test_project", 
    "createdAt": "2017-03-15T10:27:06.295+0000", 
    "modifiedAt": "2017-03-15T10:27:06.295+0000", 
    "config":[ 
    { 
    "key": "port", 
    "value": "12" 
    }, 
    { 
    "key": "port2", 
    "value": "123" 
    }] 
} 

だから今、私は私のオブジェクトを更新するPUT送りたいと、私は奇妙な結果になっています:

を例えば

localhost:8151/projects/58c916fad76a3a186731ad28

{ 
    "name": "test_project", 
    "config": [{ 
    "key": "port", 
    "value": "12" 
    }] 
} 

にPUTと、次のボディを送るだから私は、リストから1つの要素を削除したいです。応答は、(ステータスOK)である:

{ 
    "_id": "58c916fad76a3a186731ad28", 
    "name": "test_project", 
    "createdAt": "2017-03-15T10:27:06.295+0000", 
    "modifiedAt": "2017-03-15T10:27:06.295+0000", 
    "config":[ 
    { 
    "key": "port", 
    "value": "12" 
    }, 
    { 
    "key": "port2", 
    "value": "123" 
    }] 
} 

ので、要素の数が、私は(私の期待は、新しいリストは古いものを置き換えるということでした)期待したものは変更されませんでした。次のテスト: 私はリストする1つの新しい要素を追加したいと思います:

{ 
    "name": "test_project", 
    "config": [{ 
    "key": "port", 
    "value": "12" 
    },{ 
    "key": "port1", 
    "value": "13" 
    },{ 
    "key": "port2", 
    "value": "14" 
    }] 
} 

は、次のような結果になります:

{ 
    "_id": "58c916fad76a3a186731ad28", 
    "name": "test_project", 
    "createdAt": "2017-03-15T10:27:06.295+0000", 
    "modifiedAt": "2017-03-15T10:27:06.295+0000", 
    "config":[ 
    { 
    "key": "port", 
    "value": "12" 
    }, 
    { 
    "key": "port1", 
    "value": "13" 
    }] 
} 

新要素が追加されていないが、2番目の要素が変更されました。

List mongoの代わりに、配列として保存してサイズを変更することはできませんが、要素を更新することができます。私は正しい?

しかし、次のテストで同じ結果が返ってくるはずです。 空の設定リストを送信していますが、私は2つの要素のリストがあると思います。

{ 
    "name": "test_project", 
    "config": [] 
} 

しかし、私は次のような結果持っている私にとっては奇妙です:

{ 
    "_id": "58c916fad76a3a186731ad28", 
    "name": "test_project", 
    "createdAt": "2017-03-15T10:27:06.295+0000", 
    "modifiedAt": "2017-03-15T10:27:06.295+0000", 
    "config":[] 
} 

だから要素数が更新されました。

今は正直言って、私はそれがどのように動作するのか全然混乱しています。 SpringHeatherリポジトリがこのアクションをどのように処理し、この問題の適切な解決策を提案するのか誰も説明できますか?

+0

使用しているSpring Data Restのバージョンは? –

+0

私は2.5を使用しています。5バージョンが、最新版(2.6.1)でも試してみましたが、まだ問題はあります。 – zietek

+0

2.5.2バージョンで試してみませんか? –

答えて

0

私は同じ問題を抱えています。回避策として、PATCH要求を送信できます。これにより、配列が適切に更新されます。

関連する問題