Warum erhalte ich einen Fehler 415? Wie kann ich das beheben?


28.03.2025, 18:52

Edit: Request-Body ist im Format raw->Json

2 Antworten

Hallo,

Vielleicht will der Sever auch im Request-Header für "Content-Type" das Suffix ";charset=UTF-8" sehen. Oder das via PUT hochgeladene Requestbody JSON-Dokument entspricht nicht den Spezifikationen, hat ungültige Zeichen drin etc. (z.B. ISO statt UTF-Zeichen). Ich nehme jetzt auch mal an, dass der Server JSON sehen will und nicht etwa XML.


DeLike21 
Beitragsersteller
 28.03.2025, 19:48

Danke für die Antwort! Leider funktioniert auch das nicht… Werde jedoch dran bleiben

davegarten  28.03.2025, 20:09
@DeLike21

Hast Du mal den Servercode der Applikation angeschaut? Das würde Aufschluss geben, warum er das hochgeladene Dokument nicht akzeptiert. Oder gibt es eine Doku zur Schnittstelle? Ist PUT für die angegebene URI/ REST-Funktion überhaupt offiziell supported?

Wenn du in Postman beim Body JSON als Format auswählst, wird automatisch der Content Type Header korrekt gesetzt. Ein manuelles Setzen ist nicht nötig.

Was sagen eigentlich die Logs deiner Konsole? Gibt es dort eine Exception?

Wenn ich mich richtig an eine Situation von einem Kollegen erinnere, weiß ich eventuell den Grund. Ich glaube dort gab es auch ein 415 als Fehlermeldung, auch wenn der nicht so wirklich passt.

Wenn es das gleiche Problem ist, ist Rekursion das Problem. Der Jackson Databind (der JSON Serializer) kann das JSON nicht zu den Objekten Serialisieren, da eine Rekursion besteht. Ich glaube das war auch eher bei der Rückgabe (Java Objekt -> JSON) aufgetreten.

Bei den Entitäten definiert man ja die Abhängigkeiten als Feld zum anderen Objekt. Häufig definiert man es auch in der anderen Richtung zurück. Also A ein Feld vom Typ B und B hat ein Feld vom Typ A.

Um den Fehler zu beheben, kann die eine Richtung aus dem JSON entfernen lassen. Setze dazu @JsonIgnore an das Feld, dass du aus dem JSON entfernen möchtest.

Bezüglich API Dokumentation und interaktivem Ausprobieren, kannst du auch eine OpenAPI Spec generieren lassen und per Swagger UI visualisieren lassen. Füge dazu folgende Maven/Gradle Abhängigkeit zum Projekt hinzu. Unter dem Pfad /swagger-ui/index.html findest du dann eine Webseite. Am besten mit einem Webbrowser öffnen.


DeLike21 
Beitragsersteller
 29.03.2025, 13:34

Konsole gibt eine HttpMediaTypeNotSupportedException aus. Beim Debuggen wird die Exception geworfen, bevor ich überhaupt in die Put-Methode der Serviceklasse gehe. Das manuelle Setzen habe ich gemacht, um sicherzugehen, dass als Medientyp nicht UTF-8 noch mitgeht.

Das Problem mit der Rekursion hatte ich bereits, da erhielt ich eine TransientObjectException und einen Endlosloop, der das Programm zum Abstürzen brachte. Habe dies gelöst, indem ich mit der @JsonManagedReference Annotation gearbeitet habe. Dazu habe ich auch @JsonIgnore auf der untergeordneten Entität ausprobiert, was jedoch nicht funktionierte.

Danke für deine Tipps!

tide1109  29.03.2025, 18:01
@DeLike21

Wie sehen deine Controller aus?

Dein Get und Post soll ja funktionieren. Hat dein Post ein Request Body? Ein Get kann kein Request Body haben.

Fehlt dir beim Put Controller eventuell die @RequestBody Annotation beim Methoden Argument? Es kann kein (JSON) Body zugeordnet werden, sodass es eventuell ein 415 gibt.

Ein mögliche Ursache für ein 415 könnte auch eine fehlende JSON Dependency sein, sodass beispielsweise nur XML verstanden wird. Da deine andere Endpunkte bestimmt JSON nutzen, ist es unwahrscheinlich. JSON ist bei den Spring Boot Starter Dependencies auch bereits inklusive.

Um mögliche Konflikte mit deiner DB Entität aus dem Weg zu gehen, könntest du auch baugleiche Datenklassen ohne Annotationen verwenden.