ich stehe wieder vor einer Herausforderung den Json String richtig darzustellen. Ich habe meine Daten mit Hilfe von Spring Data in ein H2 gespeichert über das Datenmodell
Wo ist die Zuordnung und Steuersatz hin? In der Datenbank ist es gespeichert. Beim Debuggen bekomme ich auch werte für diese Felder, warum ist es im JSon String nicht vorhanden?
Weil die Daten lazy abgerufen werden, werden diese nicht serialisiert.
Versuch mal testweise auf eager zu setzen.
Wenn man dennoch lazy haben möchte, was in deinem Fall ja nicht gegeben ist, kann man sich eine Bean einfügen, die den json Object Mapper auf hibernate Proxys einstellt.
I have a solution using Spring Data JPA and a REST Controller in Spring Web MVC. The persistence provider is Hibernate. The persistence layer is built using Spring Repositories and between de REST
Weil die Daten lazy abgerufen werden, werden diese nicht serialisiert.
Versuch mal testweise auf eager zu setzen.
Wenn man dennoch lazy haben möchte, was in deinem Fall ja nicht gegeben ist, kann man sich eine Bean einfügen, die den json Object Mapper auf hibernate Proxys einstellt.
I have a solution using Spring Data JPA and a REST Controller in Spring Web MVC. The persistence provider is Hibernate. The persistence layer is built using Spring Repositories and between de REST
Ich denke LAZY kann nicht das Problem sein. Wir haben das auch mal probiert und das führt zu einem anderen Effekt. Bei der JSON-Serialisierung wird für @ManyToOne- oder @OneToMany-Associations jedes mal eine Abfrage ausgeführt. Das Gleiche noch mal für deren Associations und so weiter. Schlimmstenfalls lädt man so die ganze DB. Während der Serialisierung werden dann noch mal X Abfragen ausgeführt. Was man natürlich auch nicht will. EAGER ist auch keine Lösung, dann lädt man evtl. die ganze DB mit einer Abfrage.
Ich würde das Vorgehen generell in Frage stellen. Die Rückgabe von Entities kann die gesamte Domäne offenlegen und man verliert evtl. die Kontrolle über besonders schützenswerte Daten. Das Vorgehen ist generell nicht empfohlen.
Es sollten generell immer DTO's benutzt werden um Daten weiterzugeben und auch zu empfangen. DTO's können direkt als Rückgabe einer Abfrage erzeugt werden, das kann SpringBoot/Data auch unschlagbar gut mit seinen Repositories. Die andere Möglichkeit wäre ModelMapper zu verwenden, um z.B. aus DTO's wieder Entities zu machen.
So hält man auch die Jackson-Annotations und die Validierungsannotations aus den Entities raus.
Mir ist klar, dass das in den Tutorials immer anders gezeigt wird. Man muss sich aber darüber im klaren sein, das in Tutorials vereinfacht wird. Auch Sicherheit spielt da oft keine Rolle. Es soll eben nur veranschaulicht werden wie einfach alles ist. Quasi "Hallo Welt" fürs Web.