Невозможно опубликовать напрямую в подресурсе в весенней загрузке данных

У меня есть базовый 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"
}

person apostrophedottilde    schedule 09.09.2016    source источник
comment
JSON кажется неправильным. Если сообщение уже существует, почему бы не опубликовать его с идентификатором сообщения? Кроме того, откуда приходит отправитель и почему это URL-адрес вашего API? И, наконец, вы получаете какие-либо ошибки в IDE или браузере?   -  person ChiefTwoPencils    schedule 10.09.2016
comment
Я только что понял, что id пропустил отправителя в примере (я обрезал код и случайно вырезал его), сейчас я его исправлю.   -  person apostrophedottilde    schedule 10.09.2016
comment
Я до сих пор не понимаю, почему у вас такой отправитель. Я думаю, что добавление объекта post: и объекта sender: к вашему json будет началом. Но вам понадобится идентификатор сообщения. Или вы можете отправить идентификаторы для пользователя, опубликовать и получить их из своих служб и добавить их таким образом; Я бы не стал публиковать их через API. Во-первых, попробуйте опубликовать сообщение с открытой консолью браузера и сообщите нам, если у вас возникнут какие-либо ошибки.   -  person ChiefTwoPencils    schedule 10.09.2016
comment
в порядке. ну, я попытался включить URL-адрес сообщения, но это тоже не сработало. плохой эксперимент и дайте вам знать. также код состояния, который я получаю, «204 нет контента»   -  person apostrophedottilde    schedule 10.09.2016
comment
Не URL. Скажем, например, комментарий сделан и еще не привязан к посту. Ваш код js может выглядеть так: comment.post = thePost;; то же самое для sender (если он у вас есть).   -  person ChiefTwoPencils    schedule 10.09.2016
comment
я не знаю о js на самом деле. я просто вызываю API в клиенте отдыха (почтальоне) в данный момент   -  person apostrophedottilde    schedule 10.09.2016


Ответы (1)


Оказалось, что мне нужно было использовать mapped by, т.е. @OneToMany(mappedBy = "post") в моем списке комментариев в моем классе Post. Теперь я могу отправлять сообщения на http://localhost:8090/comments, а затем, когда я подписываюсь на http://localhost:8090/posts/1/comments ссылка, как и раньше, теперь я вижу комментарии.

person apostrophedottilde    schedule 10.09.2016