【发布时间】:2017-03-15 10:46:24
【问题描述】:
所以我在更新包含元素列表的对象时遇到了问题。我的对象定义:
public class Project {
private String _id;
private String name;
private List<Pair> config;
}
还有 Pair 对象:
public class Pair {
private String key;
private String value;
}
我正在使用 Spring Rest 存储库来提供 Rest Api,所有内容都存储在 mongodb 中。只需使用简单的接口创建 mongoRepository
@RepositoryRestResource(collectionResourceRel = "project", path = "projects")
public interface ProjectRepository extends MongoRepository<Project, String>{
Project findByName(String name);
}
当我使用 json 创建项目对象时(将 POST 发送到 /projects):
{
"name": "test_project",
"config": [{
"key": "port",
"value": "12"
},{
"key": "port2",
"value": "123"
}]
}
我得到了正确的响应并且对象已经创建:
{
"_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 来更新我的对象,但我得到了奇怪的结果:
例如发送以下带有 PUT 的正文到
localhost:8151/projects/58c916fad76a3a186731ad28
{
"name": "test_project",
"config": [{
"key": "port",
"value": "12"
}]
}
所以我想从列表中删除一个元素。响应是(状态正常):
{
"_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"
}]
}
所以元素的数量并没有改变我的预期(我的期望是新列表替换旧列表)。下一个测试: 我想在列表中添加一个新元素:
{
"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"
}]
}
尚未添加新元素,但第二个元素已更改。
它看起来不像 List mongo 将其保存为数组并且不能更改大小但可以更新元素。我说的对吗?
但是,如果它是真的,那么下一个测试应该返回相同的结果: 我正在发送配置的空列表,我希望我将有一个包含两个元素的列表。
{
"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":[]
}
所以元素的数量已经更新了。
说实话,我现在完全搞不懂它是如何工作的。谁能解释一下 Spring rest 存储库如何处理此操作并针对此问题提出适当的解决方案?
【问题讨论】:
-
您使用的是什么 Spring Data Rest 版本?
-
我使用的是 2.5.5 版本,但我也尝试了最新的 (2.6.1),但问题仍然存在。
-
能不能用2.5.2版本试试?
-
没有任何改变。同样的问题
-
还有什么版本的spring-data-mongodb?
标签: java spring rest spring-data-mongodb spring-data-rest