У меня есть базовый API для загрузки данных Spring с сообщениями, которые могут иметь много комментариев. Моя проблема в том, что я не могу найти способ опубликовать свой комментарий непосредственно в URI подресурса, например http://localhost:8090/posts/1/comments.
Единственный способ, которым я смог это сделать, — сначала создать ресурс комментариев по адресу http://localhost:8090/comments, а затем опубликуйте uri комментария в http://localhost:8090/posts/1/comments. а>.
Это кажется действительно плохой идеей, поскольку комментарии никогда не должны существовать сами по себе и должны быть связаны только с постом.
Кто-нибудь знает, как я могу сделать это как одно действие, иначе мне придется вручную иметь дело с потенциальными потерянными комментариями, когда комментарий публикуется, но никогда не публикуется в http://localhost:8090/posts/1 по любой причине.
Мой код ниже. Любая помощь будет принята с благодарностью.
@Entity
public class Comment extends ResourceSupport {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Long id;
private String comment;
@ManyToOne
private Post post;
@ManyToOne
private User sender;
protected Comment() {};
public void setId(Long id) {
this.id = id;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public User getSender() {
return sender;
}
public void setSender(User sender) {
this.sender = sender;
}
public Post getPost() {
return post;
}
public void setPost(Post post) {
this.post = post;
}
@Entity
public class Post extends ResourceSupport {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private @JsonIgnore Long id;
private String text;
@OneToMany
private List<Comment> comments;
protected Post () {};
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<Comment> getComments() {
return comments;
}
public void setComments(List<Comment> comments) {
this.comments = comments;
}
}
@RepositoryRestResource
public interface PostRepository extends PagingAndSortingRepository<Post, Long> {}
@RepositoryRestResource
public interface CommentRepository extends PagingAndSortingRepository<Comment, Long> {}
@SpringBootApplication
@EnableJpaRepositories("rest.api.repository")
@EnableWebMvc
@EnableTransactionManagement
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
json, который я использую, чтобы попытаться опубликовать комментарий в сообщении,
{
"comment": "some text",
"sender": "http://localhost:8090/users/1"
}
post:
и объектаsender:
к вашему json будет началом. Но вам понадобится идентификатор сообщения. Или вы можете отправить идентификаторы для пользователя, опубликовать и получить их из своих служб и добавить их таким образом; Я бы не стал публиковать их через API. Во-первых, попробуйте опубликовать сообщение с открытой консолью браузера и сообщите нам, если у вас возникнут какие-либо ошибки. - person ChiefTwoPencils   schedule 10.09.2016comment.post = thePost;
; то же самое дляsender
(если он у вас есть). - person ChiefTwoPencils   schedule 10.09.2016