В настоящее время у меня есть приложение загрузки Spring с использованием Spring Data REST. У меня есть объект домена Post
, который имеет отношение @OneToMany
к другому объекту домена, Comment
. Эти классы структурированы следующим образом:
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...
}
Их хранилища Spring Data REST JPA являются базовыми реализациями CrudRepository
:
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
CommentRepository.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
Точка входа приложения - это стандартное, простое приложение загрузки Spring. Все настроено на запас.
Application.java
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
Все работает правильно. Когда я запускаю приложение, все работает правильно. Я могу отправить POST новый объект 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 в http://localhost:8080/posts/1/comments
, я возвращаю пустой объект {}
, и если я пытаюсь отправить сообщение POST на тот же URI, я получаю метод HTTP 405, который не разрешен.
Каков правильный способ создания ресурса Comment
и связать его с этим Post
? Я бы хотел, чтобы избежать POSTing непосредственно http://localhost:8080/comments
, если это возможно.