Hiện tại tôi có một ứng dụng Spring Boot sử dụng Spring Data REST. Tôi có một thực thể miền Post
có @OneToMany
mối quan hệ với một thực thể miền khác Comment
,. Các lớp này được cấu trúc như sau:
Post.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...
}
Comment.java:
@Entity
public class Comment {
@Id
@GeneratedValue
private long id;
private String author;
private String content;
@ManyToOne
private Post post;
// Standard getters and setters...
}
Kho lưu trữ Spring Data REST JPA của họ là các triển khai cơ bản của CrudRepository
:
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
CommentRepository.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
Điểm nhập ứng dụng là một ứng dụng Spring Boot tiêu chuẩn, đơn giản. Tất cả mọi thứ được cấu hình cổ phiếu.
Application.java
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
Mọi thứ dường như hoạt động chính xác. Khi tôi chạy ứng dụng, mọi thứ dường như hoạt động chính xác. Tôi có thể ĐĂNG một đối tượng Bài đăng mới để http://localhost:8080/posts
thích như vậy:
Thân hình:
{"author":"testAuthor", "title":"test", "content":"hello world"}
Kết quả tại 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"
}
}
}
Tuy nhiên, khi tôi thực hiện GET, http://localhost:8080/posts/1/comments
tôi nhận được một đối tượng trống được {}
trả về và nếu tôi cố gắng ĐĂNG nhận xét lên cùng một URI, tôi nhận được Phương thức HTTP 405 Không được phép.
Cách chính xác để tạo một Comment
tài nguyên và kết hợp nó với nó là Post
gì? Tôi muốn tránh ĐĂNG trực tiếp http://localhost:8080/comments
nếu có thể.