如何在Spring Data Rest Application

时间:2016-08-30 13:54:57

标签: java spring spring-boot spring-data-jpa spring-data-rest

我正在尝试使用Spring Boot + Data Rest + JPA构建简单的应用程序 A具有一对多关系的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);
    }
}

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

我尝试了这里描述的解决方案:POSTing a @OneToMany sub-resource association in Spring Data REST   - 对我不起作用:在“ContentType:text / uri-list”标题的PUT请求中,我有响应代码204,数据库中没有变化。看得更深,我在日志中找到了以下调试消息:

s.w.s.m.m.a.RequestMappingHandlerMapping : 
Did not find handler method for [/categories/1/books]

此网址仅适用于GET请求。

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

感谢。

1 个答案:

答案 0 :(得分:2)

创建 book(id:1)和category(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

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