如何在Spring Data Rest应用程序中创建实体之间的引用

我正在尝试使用Spring Boot + Data Rest + JPA构建简单的应用程序。
A具有一对多关系的Category和Book实体:

 @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; @OneToMany(cascade = CascadeType.ALL, mappedBy = "category") private Set books; ...getters & setters next... } 

 @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; @ManyToOne private Category category; ...getters & setters next... } 

每个实体的简单存储库

 @RepositoryRestResource public interface BookRepository extends JpaRepository {} @RepositoryRestResource public interface CategoryRepository extends JpaRepository {} 

和申请:

 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

应用程序启动成功,我可以创建书籍和类别。
问:我如何创建和删除它们之间的引用?

我尝试了这里描述的解决方案: 在Spring Data REST中发布@OneToMany子资源关联 – 对我来说不起作用:在PUT请求中使用“ContentType:text / uri-list”标题我有响应代码204并且没有更改数据库。 看得更深,我在日志中发现了以下调试消息:

 swsmmaRequestMappingHandlerMapping : Did not find handler method for [/categories/1/books] 

此url仅适用于GET请求。

问:我的配置有什么问题吗?

谢谢。

要在book(id:1)和category(id:1)之间创建关系:

  • 提出请求,
  • 媒体类型:text / uri-list,
  • 数据: http:// localhost:8080 / categories / 1
  • 请求http:// localhost:8080 / books / 1 / category

curl的例子:

 curl -X PUT -H "Content-Type: text/uri-list" -d "http://localhost:8080/categories/1" http://localhost:8080/books/1/category 

删除此关系,只需对同一地址执行删除请求

curl的例子:

 curl -X DELETE http://localhost:8080/books/1/category 

并回答你的第二个问题:你的配置看起来很好,我已经在你的代码上测试了这个例子。