これは、要素のリストを含むオブジェクトの更新に問題があります。私のオブジェクト定義: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リポジトリがこのアクションをどのように処理し、この問題の適切な解決策を提案するのか誰も説明できますか?
使用しているSpring Data Restのバージョンは? –
私は2.5を使用しています。5バージョンが、最新版(2.6.1)でも試してみましたが、まだ問題はあります。 – zietek
2.5.2バージョンで試してみませんか? –