在Spring Data REST中POSting@OneToMany子资源关联
目前我有一个使用Spring Data REST的Spring Boot应用程序。我有一个域实体,它与另一个域实体有关系。这些类的结构如下:Post
@OneToMany
Comment
邮 编.java:
@Entity
public class Post {
@Id
@GeneratedValue
private long id;
private String author;
private String content;
private String title;
@OneToMany
private List<Comment> comments;
// Standard getters and setters...
}
评论.java:
@Entity
public class Comment {
@Id
@GeneratedValue
private long id;
private String author;
private String content;
@ManyToOne
private Post post;
// Standard getters and setters...
}
他们的Spring Data REST JPA存储库是以下方面的基本实现:CrudRepository
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
注释存储库.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
应用程序入口点是一个标准的、简单的 Spring Boot 应用程序。一切都是配置库存。
应用.java
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
一切似乎都正常工作。当我运行应用程序时,一切似乎都正常工作。我可以发布一个新的Post对象,如下所示:http://localhost:8080/posts
身体:{"author":"testAuthor", "title":"test", "content":"hello world"}
结果位于 :http://localhost:8080/posts/1
{
"author": "testAuthor",
"content": "hello world",
"title": "test",
"_links": {
"self": {
"href": "http://localhost:8080/posts/1"
},
"comments": {
"href": "http://localhost:8080/posts/1/comments"
}
}
}
但是,当我执行GET时,我得到了一个空对象,如果我尝试将注释发布到相同的URI,我得到一个HTTP 405方法不允许。http://localhost:8080/posts/1/comments
{}
创建资源并将其与此关联的正确方法是什么?如果可能的话,我想避免直接POST。Comment
Post
http://localhost:8080/comments