Atualmente tenho um aplicativo Spring Boot usando Spring Data REST. Tenho uma entidade de domínio Post
que está @OneToMany
relacionada com outra entidade de domínio Comment
,. Essas classes são estruturadas da seguinte forma:
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...
}
Seus repositórios Spring Data REST JPA são implementações básicas de CrudRepository
:
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
CommentRepository.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
O ponto de entrada do aplicativo é um aplicativo Spring Boot simples e padrão. Tudo está configurado em estoque.
Application.java
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
Tudo parece funcionar corretamente. Quando executo o aplicativo, tudo parece funcionar corretamente. Posso POSTAR um novo objeto Post para http://localhost:8080/posts
assim:
Corpo:
{"author":"testAuthor", "title":"test", "content":"hello world"}
Resultado em 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"
}
}
}
No entanto, quando executo um GET em http://localhost:8080/posts/1/comments
, obtenho um objeto vazio {}
retornado e, se tento fazer um POST de um comentário para o mesmo URI, obtenho um Método HTTP 405 Não Permitido.
Qual é a maneira correta de criar um Comment
recurso e associá-lo a ele Post
? Eu gostaria de evitar o POST diretamente em, http://localhost:8080/comments
se possível.