L'affichage d'un @OneToMany sous-ressources de l'association au Printemps de Données RESTE
Actuellement, j'ai un Ressort de Démarrage de l'application à l'aide de Données du Printemps de REPOS. J'ai une entité de domaine Post
qui a le @OneToMany
relation à une autre entité de domaine, Comment
. Ces cours sont structurés comme suit:
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...
}
Printemps de Données RESTE JPA dépôts sont à la base des implémentations de CrudRepository
:
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
CommentRepository.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
L'application de point d'entrée est un standard de Printemps simple application de Démarrage. Tout est configuré stock.
Application.java
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
Tout semble fonctionner correctement. Quand je lance l'application, tout semble fonctionner correctement. Je peux POSTER un nouveau message objet http://localhost:8080/posts
comme suit:
Corps:
{"author":"testAuthor", "title":"test", "content":"hello world"}
Suite à 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"
}
}
}
Cependant, lorsque j'effectue une OBTENIR à http://localhost:8080/posts/1/comments
- je obtenir un objet vide {}
retourné, et si j'essaie de POSTER un commentaire à la même URI, j'obtiens un HTTP 405 method not Allowed.
Quelle est la bonne façon de créer un Comment
des ressources et de l'associer à ce Post
? J'aimerais éviter de les publier directement sur http://localhost:8080/comments
si possible.
- 7 jours plus tard et toujours pas de chance. Si quelqu'un connaît un moyen pour obtenir ce comportement de travail, s'il vous plaît laissez-moi savoir. Merci!
- êtes-vous à l'aide de @RepositoryRestResource ou d'un contrôleur? Il serait utile de voir que le code ainsi.
- Je suis à l'aide de Printemps de démarrage de données de repos ,Il a travaillé pour moi http://stackoverflow.com/questions/37902946/add-item-to-the-collection-with-foreign-key-via-rest-call
Vous devez vous connecter pour publier un commentaire.
Vous devez poster le commentaire de la première et de publier le commentaire, vous pouvez créer une association postes entité.
Il devrait ressembler à quelque chose comme ci-dessous :
et qu'il fonctionne parfaitement bien.
author.post
est accessible en écriture (par exemple en ayant un setter ou@JsonValue
annotation)En supposant que vous avez déjà découvert le post URI et donc l'URI de l'association des ressources (considéré comme
$association_uri
dans la suite), il faut généralement les étapes suivantes:Découvrir la collection de ressources de gestion des commentaires:
Suivez les
comments
lien etPOST
vos données à la ressource:Attribuer le commentaire pour le post par l'émission d'un
PUT
à l'association URI.Noter que, dans la dernière étape, selon le cahier des charges
text/uri-list
, vous pouvez soumettre plusieurs Uri identifiant les commentaires séparés par un saut de ligne à affecter plusieurs commentaires à la fois.Quelques notes sur le général, les décisions de conception. Un post/commentaires exemple est généralement un excellent exemple pour un agrégat, ce qui veut dire que je devrais éviter le retour de la référence de la
Comment
à laPost
et d'éviter lesCommentRepository
complètement. Si les commentaires n'ont pas un cycle de vie sur leur propre (ce qui n'est généralement pas dans une composition de style de relation) vous plutôt les commentaires rendu inline directement et l'ensemble du processus d'ajout et de suppression de commentaires peuvent être traitées en utilisant JSON Patch. Printemps de Données RESTE a ajouté soutien pour que dans la dernière release candidate pour la prochaine version 2.2.Location
en-tête alors?@JoinColumn(nullable=false)
)? Il ne serait pas possible de le premier POST de l'enfant, puis METTRE/PATCH de l'association des parents d'élèves.Il y a 2 types de cartographie de l'Association et de la Composition. Dans le cas de l'association nous avons utilisé la table de jointure concept comme
Employé--1 à n-> Département
Donc 3 tables seront créées dans le cas de l'Association
Employé, Département, Employee_Department
Vous avez seulement besoin de créer le EmployeeRepository dans vous code. En dehors de cette cartographie devrait être comme ça:
Depatment Entité contiennent pas de mappping pour forign clé...alors maintenant, quand vous essayez de la requête POST pour ajouter des Employés du Ministère en json unique requête, alors il sera ajouté....
J'ai affronté le même scénario et j'ai dû enlever le dépôt de catégorie pour le sous-entité que j'ai utilisé pour beaucoup de cartographie et d'extraire des données à travers la principale entité elle-même. Maintenant, je suis l'obtention de la totalité de la réponse avec les données.
Pour oneToMany de cartographie, il suffit de faire un POJO pour la classe que vous souhaitez Mapper, et @OneToMany annotation à elle, et à l'intérieur il carte il à la Table id.
Aussi, vous devez implémenter l'interface Serializable pour la classe de récupérer les Données.