JSON für Spring Boot Endpunkte erzeugen

Oneixee5

Top Contributor
Was meint ihr, ist es nachteilig JSON für REST-Endunkte direkt in der Datenbank zu erzeugen, anstatt den ganzen Weg über Entities, DTO's und Jackson zu gehen?
Bspw. direkt über natives SQL:
SQL:
select
  JSON_ARRAYAGG (
    JSON_OBJECT(
      'id' is b.ID,
      'label' is b.LABEL
      -- mehr Spalten
      absent on null
    ) order by b.LABEL returning clob
  ) JSON
from TABLE b
  inner join ...
  inner join ...
where b...
Ein Wechsel der DB ist für die betroffenen Projekte sowieso unrealistisch und das sind wahre Monster (Exadata). Die größte Rolle spielt hier Geschwindigkeit und Latenz.
Das Ergebnis der Abfrage wäre dann immer eine String - fertiges JSON.
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Ich sehe da keinen Nachteil. Die Frage ist: Schreibt ihr in Java Logik welche diese Objekte verwendet oder habt ihr das alles in der Datenbank? Wenn ihr das alles in der Datenbank habt (dann erstmal meine Gratulation dazu die Geschaeftslogik dort zu haben, das fand' ich immer die besten Projekte, super einfach neue Schnittstellen/Oberflaechen zu machen) dann bringt es nichts wenn ihr alles doppelt abbildet.

Weil genau das ist es ja wenn man ein POJO-Model passend zur Datenbank hat, man hat alles doppelt. Da gibt es dann die Ansaetze das man das Model aus der Datenbank generiert (meine Meinung: "Wenn du Code generierst hast du etwas falsch gemacht"), oder du generierst die Datenbank aus den POJOs (was teilweise echt leidlich funktioniert und Migrationen sind Horror). Wenn du dir das alles also ersparen kannst, dann waere das doch etwas gutes. Mal abgesehen davon dass Spring ja doch einiges an Komplexitaet und Eigenheiten mitbringt (Monolithen brauchen keine Dependency-Injection, unter anderem...das aendert sich eh nie dynamisch) und wenn du da eventuell auf etwas leichtgewichtigeres setzen kannst (Spark?) dann ist das ja nur ein Vorteil.
 

Oneixee5

Top Contributor
Die Frage ist: Schreibt ihr in Java Logik welche diese Objekte verwendet oder habt ihr das alles in der Datenbank?
Beim Laden des JSON möchte ich soweit keine Logik im Java/Endpunkt/Service haben. Security und Validierung der Parameter wenn erforderlich ja ansonsten nur die Abfrage->JSON und ab zum Client. Für Security und Validierung habe ich Annotions gebaut. In der SQL-Abfrage ist dann vermutlich noch etwas Logik enthalten, so etwas wie - als gelöscht markierte Datensätze ausschließen. Das würde ich aber sowieso machen und nicht erst im Service umsetzen.
Das Speichern der Daten ist dann etwas Anderes. Da muss teilweise. viel mehr validiert werden. Das passiert aber nicht in der DB, sondern in Services mit Entities und auch Hibernate Validator.
 

walk

Mitglied
Imho ist das eine Architekturfrage. In einer Mikroservice-Architektur gehe ich mit dem Ansatz mit, dass man hier die Logik nicht im Service kapselt und zusätzlich POJOs / DTO/VOs usw. etabliert. Da soll der Service als Schnittstelle zur Datenbank dienen, um die Business-Logic kümmern sich dann andere Services.

Bei einem monolithschen Ansatz sieht die Sache dann anders aus. Dass DTOs Klassenexplosionen ermöglichen ist sicherlich eine Gefahr, aber das trifft ja nicht nur für Container-Klassen zu, sondern auch für Projekte in denen man es mehr als gut gemeint hat, alles möglichst generisch zu halten und dann möglichst viele abstrakte Klassen bereitzustellen.

Den Artikel von @mrBrown sehe daher skeptisch. Als seien DTOs, Lombok, und überhaupt Mapper Teufelszeug und gar nicht notwendig.
 

mrBrown

Super-Moderator
Mitarbeiter
Inwiefern macht es da einen Unterschied, ob Monolith oder Microservice?

In beiden Fällen hab ich Daten und Geschäftslogik im gleichen Projekt (in einem Fall halt „mehrere Geschäftslogiken“), und in beiden hab ich den Fall, dass ich Daten nur stumpf ohne weitere Verarbeitung nach außen geben muss - und genau in solchen Fällen kann man sich das Mappen von Datenbank-Result -> Entitäten -> DTOs -> JSON einfach sparen und direkt JSON nutzten, da fällt nichts weg außer Transformationen zwischen verschiedenen Darstellungsarten.
 

walk

Mitglied
@mrBrown: Kommt doch eher auf darauf an, welche Daten ich zurückgeben möchte, oder nicht? Ich möchte doch eingrenzen können, welcher Aufrufer welchen Attribute einer Entität sehen darf. Das regel ich mit dem Ansatz ohne DTO dann über dedizierte SQL-Abfragen? Bin mir halt nicht sicher, ob ich hier wirklich Komplexität einspare.
 

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown: Kommt doch eher auf darauf an, welche Daten ich zurückgeben möchte, oder nicht? Ich möchte doch eingrenzen können, welcher Aufrufer welchen Attribute einer Entität sehen darf. Das regel ich mit dem Ansatz ohne DTO dann über dedizierte SQL-Abfragen? Bin mir halt nicht sicher, ob ich hier wirklich Komplexität einspare.
Wie ich sagte, sinnvoll ist das nur, wenn ich …
[…]Daten nur stumpf ohne weitere Verarbeitung nach außen geben[…]
… muss.


Wenn man die Daten erst weiter verarbeiten muss, macht es durchaus auch Sinn, das irgendwo zwischen Datenbank und Browser zu machen.
 

Robert Zenz

Top Contributor
Den Artikel von @mrBrown sehe daher skeptisch. Als seien DTOs, Lombok, und überhaupt Mapper Teufelszeug und gar nicht notwendig.

Ja aber genau das ist es doch! Die Antwort ist weniger Magie, nicht noch eine Schicht damit es einfacher wird. Aber gut, angesichts dessen dass ich an genau so einem Framework mitgearbeitet habe (und immer noch fest an den Ansatz glaube) bin ich da vielleicht auch ein wenig voreingenommen.

Inwiefern macht es da einen Unterschied, ob Monolith oder Microservice?

In den meisten Projekten scheint der Unterschied nur die Anzahl der Container zu sein. Wenn man einen Monolithen in Kleinstdienste zerlegt, hat man immer noch einen Monolithen...aber dafuer mit vielen beweglichen Teilen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Rest-Client/DTOs aus JSON Ergebnis generieren Allgemeines EE 3
M RESTful Webservice mit json Allgemeines EE 2
OnDemand REST Json Response Mapping ist null Allgemeines EE 2
T Json & Xml deserialisierung Allgemeines EE 1
G json-b + jax-rs + getter mit Parameter = NullPointerException Allgemeines EE 10
D JSON abspeichern mit gleichen Datenbank Eintrag Allgemeines EE 3
P Webseite parsen --> DB --> JSON Allgemeines EE 5
S JSON vs. InnerHTML? Allgemeines EE 2
D Neue Versionen für Serveranwendung Allgemeines EE 2
TheWhiteShadow JSF plugins für tomcat webapp Allgemeines EE 0
R Docker für Windows in Microservices-Projekt Allgemeines EE 2
2 Wildfly JPA Konfiguration für mysql Allgemeines EE 0
R RHCSA/RHCE für Software Architect? Allgemeines EE 1
G JSF Datenstruktur für DataTable Allgemeines EE 2
S Welcher Java EE Applikationserver für RESTful Webservice? Allgemeines EE 2
G Softwarearchitektur für Batchjobs Allgemeines EE 1
A @Webfilter - für doppelte Anmeldung Allgemeines EE 0
R DotNet für J2EE Programmierer Allgemeines EE 1
I Brauche Anregungen für Mandantensystem: Abspeicherung Allgemeines EE 4
R Welches System das beste für programmierer. Linux oder Windows Allgemeines EE 8
L JSP: Dynamischer Content mit Beans für einen Konfigurator? Allgemeines EE 0
M JAX-RS: Unterschhiedliche Typen für POST und GET Allgemeines EE 1
A Zufallstext für YellowPress Allgemeines EE 5
D Prozess für die Zusammenarbeit Allgemeines EE 7
F Gesucht: Gratis Server für Java Entwickler Allgemeines EE 4
A Ideen für Datenhaltung Allgemeines EE 9
c_sidi90 Gute Bücher/Tutorials für Einstieg in JSP/Servlets Allgemeines EE 3
H Glassfish - Open Source Lizenz für den kommerziellen produktiven Einsatz? Allgemeines EE 2
Evil-Devil Server/Tech-Empfehlung für Web-App? Allgemeines EE 12
M Wegweiser für Projekt einer Katastrophen-Stab-SW gesucht! Allgemeines EE 2
slawaweis CMS Unterbau für eine Web 2.0 Anwendung Allgemeines EE 4
B Frameworks/Technologien für Web-Anwendungen Allgemeines EE 16
P Nur ein User für Web Application Allgemeines EE 11
W Struts Tutorial für EE Noobs? Allgemeines EE 2
H Installer für Tomcat-Anwendung Allgemeines EE 5
D maven für javaEE projekt Allgemeines EE 20
Java.getSkill() Anwendung Beans für Formulare Allgemeines EE 5
T Einstieg JEE: Frage für Frage bis zum Erfolg :-) Allgemeines EE 28
Antoras JSP für MVC geeignet? Allgemeines EE 13
I Für dieses Projekt ausreichend? Allgemeines EE 6
P [Maven2] maven-jaxb2-plugin - Kein absoluter Pfad für "<schemaDirectory> möglich??? Allgemeines EE 2
T Suche Buch für: Large Scale Web-Apps | Clustering | Scaling in Java ? Allgemeines EE 4
2 JSTL Tags für eine Bean? Allgemeines EE 4
S Weboberfläche für jconsole Allgemeines EE 5
I Klassen werden nicht für Import erkannt eclipse EE Allgemeines EE 2
F Architekturvorschläge für Online-Wörterbuch? Allgemeines EE 5
foobar Client-Jar und JPA-Entities für Remotzugriff Allgemeines EE 12
G Framework für selbsterstellte Formular und Seiten gesucht Allgemeines EE 3
R Sourcen einbinden von J2EE bzw auch für Servlets in Eclipse Allgemeines EE 8
D Standard für Authentifzierung und Autorisierung Allgemeines EE 5
D Liste für dataTable (JSF) manuell füllen Allgemeines EE 2
R Tutorial für J2EE Allgemeines EE 3
F FORM Auth in JBoss für User mit falscher Rolle ? Allgemeines EE 2
M Eclipse GUI für EJB-QL bzw HQL? Allgemeines EE 4
eskimo328 java oder php für Support-Ticketing-System Allgemeines EE 12
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
J Timeout für InitialContext Allgemeines EE 2
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
J Encoder für Java String in html format Allgemeines EE 6
N Zugriff auf Webapp nur für localhost definieren (Tomcat) Allgemeines EE 2
J Konvertierungs-Fehler: Wert ''{0}'' für Modell ''{1}'' Allgemeines EE 10
flashfactor Gibt es ein Case Management für Java Application Server? Allgemeines EE 6
T Zu blöd für JSTL Allgemeines EE 6
B GlassFish & JAAS - Konfiguration für AppClient Allgemeines EE 1
M Kostenloses JSP Plugin für Eclipse Allgemeines EE 6
flashfactor Gibt es ein Transportsystem für Java EE Allgemeines EE 5
boxi JSF für Anfänger Allgemeines EE 8
F JSF h:outputlink für zurück Allgemeines EE 5
boxi JSF Parameter für die nächste seite übergeben Allgemeines EE 2
W Arbeitsumgebung für JSP-Development einrichten (Eclipse, .) Allgemeines EE 3
F Quiz in JSP - Sessionvariable mitzählen (für richtige Antw.) Allgemeines EE 2
P Basissystem für J2EE App Allgemeines EE 5
P JSP Servlets/ Java Klassen für FTP FileUpload (Bilder) + DB Allgemeines EE 3
W Statistiken für Webseiten? Allgemeines EE 2
E Popup Fenster für fertige JSP Seit? Allgemeines EE 3
G Java EE SDK für Mac OS X? Allgemeines EE 3
K JSP für DB-Verbindung Allgemeines EE 4
H relativer Pfad für stylesheet und Pics Allgemeines EE 5
H Gibt es ein jBoss Tutorial für JSPs ? Für Anfänger ? Allgemeines EE 5
J JSF: Authentifizierung für einen einzigen Fall "umgehen Allgemeines EE 6
H Test Application für Tomcat Allgemeines EE 3
S String escpapen für JavaScript, Datenbank, HTML Allgemeines EE 2
C Tutorial für JSF Allgemeines EE 4
G WEB-INF/classpath funktioniert nicht für Dateien Allgemeines EE 2
G StandAlone & DB im Intranet [Ehem.: Beratung für Einstei Allgemeines EE 8
Phreaker Wo bekomm ich für den JBOSS ne build.xml her? Allgemeines EE 2
B Java-Client für eBaySOAP-API liefert HTTP(400) Bad Request Allgemeines EE 2
M image für submit button Allgemeines EE 3
F relativer Pfad in Servlets für Dateien Allgemeines EE 2
H Schnelleinstieg für J2EE Projekt? Allgemeines EE 5
B Besondere Ländereinstellungen für eine TomcatApp Allgemeines EE 2
G Firefox Plugin für HTTP (req&resp) visualisierung? Allgemeines EE 2
ronny "jWic" Projekt: Framework für Webapplikationen Allgemeines EE 8
H JNDI Name für die Queue - Connection Factory in JBoss ändern Allgemeines EE 3
A Dateinamen für OutputStream Allgemeines EE 2
C "Data-holding" Klasse für JSP und ear Allgemeines EE 9
G Kickstart für JSF Allgemeines EE 2
D wysiwyg-editor für velocity? Allgemeines EE 3
J Hilfe. brauche Dokumente für die Diplomarbeit Allgemeines EE 9
A relativer Pfad zim Tomcat-Verzeichnis für FileInputStream Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben