Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)?

doncarlito87

Mitglied
Hi Forum ich bin neu hier und habe ein Problem mit meiner Applikation. Daran sitze ich schon seit Tagen und komme leider nicht weiter.

Ich versuche ein Service zu schreiben der mir die Daten aus einer unbestimmten Liste ausgeben kann. Dabei verwende ich keine Entitäten und kein Repository.

Java:
    @Override
    public List<Object[]> getList(String tableName, String schemaName) {
        final String sql = "SELECT * FROM " + schemaName + "." + tableName;
        List<Object[]> result = em.createNativeQuery(sql)
                                .getResultList();
        return result;
    }

Aktuell bekomme ich zwar Daten aus meiner Datenbank heraus. Jedoch ist das Format nicht das gewünschte. Hier seht ihr meine Response:

Code:
[
    [
        1,
        1,
        "shape",
        null,
        null,
        "0200711",
        0,
        "kugel"
    ],
    [
        2,
        1,
        "shape",
        null,
        null,
        "0200712",
        0,
        "rechteck"
    ],
]

Wie man vielleicht sieht handelt es sich bei der Ausgabe um eine Liste von Objekten. ICh hätte aber gerne die Ausgabe im JSON Format zurück. Hätte jemand einen Lösungsweg für mich.

Vielen Dank
 

doncarlito87

Mitglied
Da ich nicht weiß welche Tabelle aufgerufen werden sollen und im nachhinein weitere Tabellen dazukommen könnten, will ich schon eine generische Lösung. Deshalb sind Projektions und Entitäten für mich leider nicht möglich.
 

Oneixee5

Top Contributor
"Spring Boot" klingt nach einer Server-Anwendung und du weißt nicht so genau was dein dein Programm tut und was es in Zukunft tun wird - das klingt ziemlich unüberlegt und nach einem hohen Risiko für deine Nutzer.
Prinzipiell kannst du über JDBC und MetaData alle Informationen über die Datenbankobjekte holen. Mit den Informationen über Spaltennamen und Datentypen könntest du generisch JSON erstellen.
 

Avalon

Bekanntes Mitglied
Es sieht aus wie eine Liste von Arrays. Der Rückgabetype List<Objekt[ ]> gibt die auch zurück. Versuchs mal ohne eckige Klammern List<Objekt>. Kann auch sein, das ich mich irre.
 

doncarlito87

Mitglied
Es sieht aus wie eine Liste von Arrays. Der Rückgabetype List<Objekt[ ]> gibt die auch zurück. Versuchs mal ohne eckige Klammern List<Objekt>. Kann auch sein, das ich mich irre.
Hi danke für deine Antwort. Ich habe mein Service entsprechend angepasst. Aber leider wird mir weiterhin nur eine Liste mit den Objekten angezeigt anstatt eines JSON´s.
 

mrBrown

Super-Moderator
Mitarbeiter
Nimm dir den Hinweis von @Oneixee5 zu Herzen und mach die Typen explizit. Das erspart dir viel Schmerz und macht es deutlich einfacher.


Alternativ entweder etwas nutzen, was direkt auf Maps mappen kann, oder das ganze selbst bauen - üblicherweise will man aber beides nicht, da explizit meist besser ist.
 

doncarlito87

Mitglied
Nimm dir den Hinweis von @Oneixee5 zu Herzen und mach die Typen explizit. Das erspart dir viel Schmerz und macht es deutlich einfacher.


Alternativ entweder etwas nutzen, was direkt auf Maps mappen kann, oder das ganze selbst bauen - üblicherweise will man aber beides nicht, da explizit meist besser ist.
Das würde ich gerne. Jedoch habe ich eine Anforderung die ich auch einhalten muss. Natürlich gibt es ja auch Projekte bei denen weitere Tabellen die man vorher nicht kennt hinzukommen können. Es muss doch eine Lösung geben bei denen ich keine Entität erstellen muss und dennoch ein JSON erhalten kann.
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn Tabellen hinzukommen ergänzt man eben Methoden dafür, wo ist das Problem?

Die Anforderungen, dass man beliebige Tabellen abfragen muss, die sich zur Laufzeit beliebig ändern, ist doch völliger Käse. Wenn du wirklich reines durchreichen von DB-Tabellen in JSON brauchst, spar dir den ganzen Java-Code und nutz entweder etwas, was das direkt kann, oder nutz die Datenbank und lass dir aus der direkt JSON zurückgeben.

So etwas in der Applikation völlig generisch umzusetzen und das auch noch wild aus Strings zusammen zu basteln endet üblicherweise in einer Katastrophe.

(Ausnahmen bestätigen wie immer die Regel, aber die brauchen entsprechend Vorwissen, um es halbwegs umsetzen zu können)
 

Neue Themen


Oben