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