Spring Data und Rest Controller?

lam_tr

Top Contributor
Hallo zusammen,

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

Java:
import com.fasterxml.jackson.annotation.JsonFormat;

import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

@Entity
public class Ausgabe {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String beschreibung;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate datum;
    private Double brutto;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "steuersatz_id", nullable = false)
    private Steuersatz steuersatz;

    @ManyToOne(fetch = FetchType.LAZY )
    @JoinColumn(name = "zuordnung_id", nullable = false)
    private Zuordnung zuordnung;

// Konstruktor, getter, setter

Der Rest Controller kann dann über /data/Ausgaben aufgerufen werden

Code:
@RestController
@RequestMapping("/data")
public class AusgabeRestController {

    @Autowired AusgabeRepository ausgabeRepository;
    
    @RequestMapping(path = "/ausgaben", produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Ausgabe> list() throws JsonProcessingException {
        return ausgabeRepository.findAll();
    }
}

Das passt soweit auch alles. Wenn ich den Rest Call mache, bekomme ich folgende Ausgabe
Code:
[{"id":1,"name":"A2022011801","beschreibung":"Produkt A","datum":"2022-01-18","brutto":11.99}, ....

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?

Viele Grüße
lam
 

Marinek

Bekanntes Mitglied
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.

 

Oneixee5

Top Contributor
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.

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.
 

Marinek

Bekanntes Mitglied
Ja, die Implikationen sind klar.

Auch dass man die DTOs nicht direkt serialisieren sollte ist immer etwas was man beachten muss.

Nur am Rande: Man kann es auch so hinbekommen. Aber an bestimmten Stellen wird das nervig. 😬

Möchte man das verhindern muss man mittels jsonIgnore auch entsprechende Hinweise dem ObjectMapper mitgeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
L Spring Data: Wie kann ich das Datenmodell richtig definieren? Frameworks - Spring, Play, Blade, Vaadin & Co 6
L Spring Data Einträge von User zahlen und auflisten Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Data Repository delete bulk Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Data: Hibernate liest nicht alle Ebenen Frameworks - Spring, Play, Blade, Vaadin & Co 5
L Spring Data: Detached Entity passed to persist Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 6
L Spring Data: Multiple representations of the same entity Frameworks - Spring, Play, Blade, Vaadin & Co 14
S Spring Data data.sql SQL Insert mit single quote Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring Data Hibernate mehrfache Suchkriterien Frameworks - Spring, Play, Blade, Vaadin & Co 5
J Spring data JPA Query Frameworks - Spring, Play, Blade, Vaadin & Co 2
G Spring-Boot und Spring Data Programmstart zu langsam Frameworks - Spring, Play, Blade, Vaadin & Co 21
S Spring Data: Lazy Fetch mit Self-Join. Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Data JPA - Repositories werden nicht injected Frameworks - Spring, Play, Blade, Vaadin & Co 2
X spring-data, mongodb und Mapping Frameworks - Spring, Play, Blade, Vaadin & Co 1
D spring data jpa: Wie kann man das Repository Interface in 2 Lese/Schreibe Interfaces aufteilen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D [InvalidDataAccessApiUsageException] Spring Data JPA / Hibernate Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Was ist das Framework "Spring"? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Unit/Integrations Testing Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
H Resource Liste Lazy Autowired Spring Context Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
krgewb Spring und GWT - & wird zu & amp; Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JPA/Spring Repository Like Suche leeres Ergebnis Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Spring Initializer - Webservices Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Hateoas Frameworks - Spring, Play, Blade, Vaadin & Co 1

Ähnliche Java Themen

Neue Themen


Oben