如何在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
并回答你的第二个问题:你的配置看起来很好,我已经在你的代码上测试了这个例子。