我的项目中有两个域对象,Document
和Project
。Document
s分别与单个Project
相关联。我正在使用Spring-Data-Rest,它是Repository
抽象,所以我有这个:
@Entity
public class Project extends AbstractLongIdEntity {
@Column(length=50,nullable=false)
private String title;
@Column(length=200,nullable=true)
private String description;
...
}
@Entity
public class Document extends AbstractLongIdEntity {
@Column(length=50,nullable=false)
private String title = "New Diagram";
@Column(length=200,nullable=true)
private String description;
public Document() {
}
public Document(String title, String description, Project project) {
super();
this.title = title;
this.description = description;
this.project = project;
}
@ManyToOne(targetEntity=Project.class, optional=false)
private Project project;
...
}
当我通过HTTP获取Document
时,我会得到这个:
[DEBUG] TEST - Response: 201 {
"title" : "My Document",
"description" : "Some name for a document",
"dateCreated" : "2018-02-13T06:33:14.397+0000",
"lastUpdated" : null,
"internalId" : 1,
"_links" : {
"self" : {
"href" : "http://localhost:8080/api/documents/1"
},
"document" : {
"href" : "http://localhost:8080/api/documents/1"
},
"currentRevision" : {
"href" : "http://localhost:8080/api/documents/1/currentRevision"
},
"project" : {
"href" : "http://localhost:8080/api/documents/1/project"
}
}
}
但是,我不能将相同的内容发回以首先创建文档。我发现最好的办法是发布以下内容:
{
"title" : "My Document",
"description" : "Some name for a document",
"project" : "http://localhost:8080/api/projects/1",
"currentRevision" : null,
"dateCreated" : 1518503594397,
"lastUpdated" : null
}
然而,这似乎真的很奇怪,因为:
a) 现在,我在对象中嵌入了一个未命名、未类型化的链接,这不是很HATEAOS(尽管Spring似乎正确地反序列化了它)。
b)我现在必须创建一个单独的类,DocumentResources
如下所示:
public class DocumentResource extends ResourceSupport {
public String title;
public String description;
public String project;
...
}
其中,Project
是一个String
。这很痛苦,因为我现在基本上有两个非常相似的域对象。
那么问题是:在HATEOAS/Spring数据Rest中发布新实体并让它们在数据库中创建关系的正确方法是什么?
我使用的是Spring Boot 1.5.10,它似乎引入了Spring数据Rest 2.6.10和Spring Hateoas 0.23.0。
谢啦
您可以尝试这样发布:
{
"title" : "My Document",
"description" : "Some name for a document",
"project" : "/projects/1",
"currentRevision" : null,
"dateCreated" : 1518503594397,
"lastUpdated" : null
}
我试图用jqGrid解决Spring Data Rest的问题,所有的事情都很好,除了我想要将对象全部作为序列化返回,所以在ManyToOne关系中,我现在只得到该对象的链接,而我想要将它序列化。 如您所见,中的accountManager类返回为link,但我希望它也被序列化,以便在JQGrid中显示Name属性。 向Shahbour问好
我使用的是Spring Boot1.5.3、Spring Data REST、Hateoas。我有一个简单的实体模型: 我的枚举角色是: null
我只是想学习,构建一个Spring HATEOAS应用程序。 我已将自定义查询添加到我的存储库中: 我得到了很好的JSON响应,但由于这是可分页的,我想要一个链接部分。。。使用上一个/下一个。 我该如何添加它? 主url提供了所有客户的列表,链接没有问题,我只想将这些链接添加到自定义可分页方法。 --编辑-- 啊! 使findAllFitered方法返回一个页面而不是列表。。。
我们得到了异常:参数值元素[1]与预期类型[java.lang.long(N/A)]不匹配 上面的存储库有什么问题?传递数字ID的正确方法是什么?
问题是,Spring HATEOAS和Spring Data Rest之间有什么区别? 我觉得两者都可以做同样的事情,Spring数据Rest(作为Spring数据的一部分)似乎更有活力。 https://github.com/spring-projects/spring-hateoas https://github.com/spring-projects/spring-data-rest 你什么
我一直收到一个错误,说这不是有效的json数据,并一直收到错误400。我认为我的实现没有正确格式化数据。目标:尝试使用rest模板进行post调用,将JSON数据作为主体传递。似乎从map转换为json数据时,它没有正确转换为json。