Ich entwickle eine einfache Wörterbuch RESTful API mit Spring-mvc. Es gibt zwei verbundene Unternehmen:Was ist die professionelle/Standardmethode zum Speichern eines Objekts mit einem Fremdschlüssel?
public class Word {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String word;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="LANGUAGE_ID", insertable=false, updatable=false)
private Language language;
}
Basierend auf dem Code über der verbundene Einrichtung ist Language
.
Problem: Ich möchte die Operation CREATE für die Word-Entität mit POST-Anfrage implementieren. Die Implementierung ist nicht schwierig, aber ich habe mindestens zwei Lösungskandidaten in Bezug auf die POST-Anfrage-URL und JSON-Anfragekörper gefunden:
Lösung Candicate I: direkt einfügen mit JSON Körper Anfrage. Die JSON Körper enthalten die verschachtelten JSON-Objekt - Sprache, so etwas wie
{id:1, word:"hello", Language: {id:1, language:"English"}}
Referenz: Spring: Save object with foreign keys with a POST request
Lösung Candidate II: die referenzierte Sprache id über die URL POST-Anfrage, so etwas sagen wie
POST http://localhost:8080/rest/language/1/words
Als solches gibt es kein Language
Referenz a t alle im JSON POST-Anfragetext.
Referenz: https://www.youtube.com/watch?v=_Jnu_jHfQbM
Ich habe 2 Fragen:
Frage 1: unter diesen beiden Lösungskandidaten, die die bessere ist, oder sagen professionelle Standardlösung? oder gibt es eine andere lösung?
Frage 2: als sowohl der gegebenen Lösungskandidaten, in jedem Fall müssen wir die referenzierten Language
POJO zumindest in der entsprechenden controller
Klasse abzurufen. Aber aus der Sicht des OO-Design-Prinzips scheint dieser Weg eng mit dem Controller verbunden zu sein, also denke ich, sollten wir dieses Abrufverhalten anderswo als im Controller entkoppeln? zum Beispiel in der service
Schicht. Aber ist das der professionelle Weg? und wir müssen einen entsprechenden DTO haben?
Danke zuerst für Ihren Ratschlag :) Was bedeutet "separate Modellklassen für Ihre Entitäten erstellen"? Ich hatte zwei getrennte Entitäten, sprich Sprache und Wort. U sollte ich wahrscheinlich DTO haben? Scheint das Testmodell, das du gegeben hast, ein bisschen DTO ist? – Rui
Ja, ich mag es nicht, Entitäten in der Steuerung zu verwenden. Also erstelle ich eine separate Klasse, die die Werte der entsprechenden Entität enthält, die Sie benötigen. –