目前我有一个使用 SpringDataREST 的 SpringBoot 应用程序。我有一个域实体 Post
,它与另一个域实体 Comment
有 @OneToMany
关系。这些课程的结构如下:
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> { }
应用程序入口点是一个标准的、简单的 SpringBoot 应用程序。
应用程序
@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"
}
}
}
但是,当我在 http://localhost:8080/posts/1/comments
上执行 GET 时,返回的是一个空对象 {}
,如果我尝试将注释发送到相同的 URI,则会得到一个 HTTP 405 Method Not Alallow。
创建 Comment
资源并将其与此 Post
关联的正确方法是什么?如果可能的话,我想避免直接发帖到 http://localhost:8080/comments
。