我正在尝试使用Spring Boot + Data Rest + JPA构建简单的应用程序。 具有一对多关系的Category和Book实体:
<!-- language-all: java --> @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; @OneToMany(cascade = CascadeType.ALL, mappedBy = "category") private Set<Book> 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<Book, Long> {} @RepositoryRestResource public interface CategoryRepository extends JpaRepository<Category, Long> {}
和应用:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
应用程序成功启动,我可以创建书籍和类别。 问: 如何创建和删除它们之间的引用?
我尝试了这里描述的解决方案:在Spring Data REST中发布@OneToMany子资源关联 -不适用于我:在带有 “ ContentType:text / uri-list” 标头的PUT请求上,我的响应代码为204,并且在数据库。更深入地看,我在日志中发现以下调试消息:
s.w.s.m.m.a.RequestMappingHandlerMapping : Did not find handler method for [/categories/1/books]
该网址仅适用于GET请求。
问:有 什么想法我的配置有问题吗?
谢谢。
要 创建 书(编号:1)之间的关系和类别(ID:1):
卷曲示例:
curl -X PUT -H "Content-Type: text/uri-list" -d "http://localhost:8080/categories/1" http://localhost:8080/books/1/category
要 删除 此关系,只需对同一地址执行删除请求
curl -X DELETE http://localhost:8080/books/1/category
还要回答您的第二个问题:您的配置看起来不错,并且我已经在您的代码上测试了此示例。