当前位置: 首页 > 知识库问答 >
问题:

使用Spring HATEOAS/Spring数据Rest过帐

连时铭
2023-03-14

我的项目中有两个域对象,DocumentProjectDocuments分别与单个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。

谢啦

共有1个答案

宰修能
2023-03-14

您可以尝试这样发布:

{
  "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。