Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot

Avalon

Bekanntes Mitglied
Hallo, ich habe diesen Controller der ein JSON Objekt mit JPG Bilddaten an den Clienten zurückgibt.
Java:
    @GetMapping(path = "/image/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    public ImageDto getById(@PathVariable Long id) {
        ImageDto imageDto = imageMapper.mapToDto(imageService.getImageById(id));
        return imageDto;
    }
Hier das JSON Objekt. Die Bilddaten (content) liegen in einem BLOB Feld der Datenbank (content habe ich wegen der Übersichtlichkeit gekürzt)

JSON:
{
    "id": 13,
    "content": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUD.....",
    "name": "test.jpg"
}

Wie zum Geier, bekomm ich den content jetzt aus dem JSON Objekt raus und im Browser als Jpg dargestellt?

Ein bisschen hab ich schon gelesen. Das man das mit dem BLOB eigentlich nicht macht (mir egal), daß der Content von Spring automatisch Base64 codiert ist, und wieder dekodiert werden muss, daß der Content in einen String konvertiert werden soll usw. Aber ich bekomm das alles nicht unter einen Hut. Ist ein wenig too much für mich gerade. Benötige ich einen anderen/neuen Controller der einen String zurückgibt? Brauch ich einen Controller, der den Content separat aus dem JSON Objekt holt? Ich habe keinen Schimmer? Kann mir jemand helfen? Endziel der Darstellung soll dann ein Thymeleaf Template sein.
 
Beste Antwort
Das man das mit dem BLOB eigentlich nicht macht
Ich würde an der Stelle ansetzen 😬


Trenn das in zwei Controller - einen für Metadaten (der dann ein zu JSON serialisiertes DTO zurück gibt) und einen für die Bilddaten, der Inputstream/byte[]/whatever mit den reinen Bilddaten zurückgibt, und das ganze nicht zu JSON oder so serialisiert.


Kann mir jemand helfen? Endziel der Darstellung soll dann ein Thymeleaf Template sein.
Warum dann der Umweg über JSON? Thymeleaf wird dich Serverseitig gerendert.

mrBrown

Super-Moderator
Mitarbeiter
Das man das mit dem BLOB eigentlich nicht macht
Ich würde an der Stelle ansetzen 😬


Trenn das in zwei Controller - einen für Metadaten (der dann ein zu JSON serialisiertes DTO zurück gibt) und einen für die Bilddaten, der Inputstream/byte[]/whatever mit den reinen Bilddaten zurückgibt, und das ganze nicht zu JSON oder so serialisiert.


Kann mir jemand helfen? Endziel der Darstellung soll dann ein Thymeleaf Template sein.
Warum dann der Umweg über JSON? Thymeleaf wird dich Serverseitig gerendert.
 
Beste Antwort

Avalon

Bekanntes Mitglied
Warum dann der Umweg über JSON? Thymeleaf wird dich Serverseitig gerendert.
Ich hab die ganze Zeit nur mit JSON rumhantiert. Daten in die Datenbank und Daten wieder raus. Die ganze Darstellung auf einer schönen Klickibunti Website kommt jetzt grad neu dazu. Danke für den Tip (serverseitig). Ich geh jetzt erstmal in eine Ecke, weine eine Stunde und schau mir das dann nochmal an. Danke
 

mrBrown

Super-Moderator
Mitarbeiter
Das Serverseitige Rendering löst das Problem mit Bildern nicht – für die muss man trotzdem einen eigenen Endpoint haben, über den man das reine Bild bekommt. Aber die Serialisierung von allem zu JSON ist da überflüssig.
 

Neue Themen


Oben