Kann ich Medientypen in einer Spring Rest-Methode mischen?

9

Ich versuche gerade eine ReST-Methode zu schreiben, die einen Datei-Upload akzeptiert. Wenn der Benutzer die Datei abschickt, möchte ich auch, dass sie eine Beschreibung und einige andere Metadaten zum Inhalt der Datei hinzufügen (z. B. einen "Typ", der dem Inhalt der Datei zugeordnet ist). Ich verwende den Spring MVC Controller mit Spring 4.

Dies ist ein Beispiel für das, was ich tun möchte:

%Vor%

Wenn ich jedoch versuche, diese Methode über die Swagger-Benutzeroberfläche aufzurufen, erhalte ich eine nicht unterstützte Medientyp-Ausnahme:

%Vor%

Ich vermute, dass ich application / json und multipart / form-data in einer Anfrage nicht mischen kann?

UPDATE: Basierend auf einer Antwort von zeroflagL und dem mitgelieferten Link zu der Dokumentation, die spezifisch für meine Aufgabe ist, und mit @RequestPart anstelle von @RequestBody, habe ich ein paar Fortschritte gemacht, aber das funktioniert immer noch nicht.

neue Methodensignatur:

%Vor%

neue Ausnahme:

%Vor%

Vielen Dank im Voraus, Tonya

    
Tonya Ohrel 11.12.2014, 00:42
quelle

2 Antworten

3

Sie können Medientypen in der Spring-REST-Methode mischen. @ zeroflagL / antwort vielleicht richtig. aber @RequestPart funktioniert gut. Hier ist mein Code, es ist nichts anderes als deins

%Vor%

Ich schlage vor, Sie sollten Ihre Anfrage überprüfen. nicht Ihr serverseitiger Code. Hier ist der Test-Vorschau-Code (ich habe in Chrome mit Postman getestet)

%Vor%

Inhaltstyp fehlt in Anforderung. Dieser Test ist mit MissingServletRequestPartException fehlgeschlagen, weil der erforderliche Anforderungsteil 'registerRequest' nicht vorhanden ist.

Sie können mit RESTClient oder etwas anderem testen und prüfen, ob der Inhaltstyp vorhanden ist oder nicht.

    
KiSong Kim 28.05.2015 09:07
quelle
1

Die Spring-Dokumentation erklärt explizit, was zu tun ist.

Die Idee, mix / json und multipart / form-data zu mischen, ist falsch, weil application/json ein Teil der mehrteiligen (sic!) Anfrage wäre.

WebKitFormBoundary lässt mich glauben, dass Sie versuchen, eine AJAX-Anfrage von Ihrem Browser zu senden, und ich frage mich, ob Sie wirklich JSON senden. AFAIK ist es nicht möglich, explizit einen (echten) JSON-Teil hinzuzufügen, wie er in der Spring-Dokumentation gezeigt wird. Vielleicht können Sie uns den Kundencode zeigen.

Wie auch immer, du kannst @RequestBody nicht verwenden, weil das die Dateien enthalten würde, die du hochladen willst. Sie müssten @RequestPart verwenden. Wenn Sie anstelle von JSON Formulardaten neben den Dateien senden, benötigen Sie keinerlei Anmerkungen.

    
zeroflagL 11.12.2014 12:12
quelle

Tags und Links