Ich habe einen einfachen REST-Controller in einer Spring-Boot-Anwendung geschrieben, aber ich bin mir nicht sicher, wie ich die Inhaltsverhandlung implementieren soll, um JSON oder XML basierend auf dem Content-Type-Parameter im Anfrage-Header zurückzugeben. Könnte mir jemand erklären, was mache ich falsch?
Controller-Methode:
%Vor% Beim Aufruf dieser Methode erhalte ich immer JSON (auch wenn ich Content-Type
als application/xml
oder text/xml
vorschlage).
Wenn ich zwei Methoden mit jeweils unterschiedlichen Mappings und unterschiedlichen Inhaltstypen implementiere, kann ich XML aus der XML-Datei beziehen, funktioniert aber nicht, wenn ich zwei MediaTypes in einer einzigen Methode (wie im Beispiel) angeben.
Ich möchte den Endpunkt \message
aufrufen und
Jede Hilfe ist willkommen.
BEARBEITEN: Ich habe meinen Controller aktualisiert, um alle Medientypen zu akzeptieren
%Vor%Sie finden einige Hinweise im Blog-Beitrag @ RequestMapping mit Produziert und Verbraucht zu Punkt 6.
Beachten Sie den Abschnitt über Content-Type und Accept-Header:
@RequestMapping mit Produzieren und Verbrauchen: Wir können Header verwenden Content-Type und Accept um den Inhalt der Anfrage herauszufinden und was ist das? Mime-Nachricht will es als Antwort. Zur besseren Übersicht, @RequestMapping liefert produziert und konsumiert Variablen, wo wir die angeben können Anfrage content-type für welche Methode aufgerufen wird und die Antwort Inhaltstyp. Zum Beispiel:
%Vor%Die obige Methode kann Nachrichten nur mit Content-Type als text / html konsumieren und kann Nachrichten vom Typ application / json und Anwendung / xml.
Sie können auch diesen anderen Ansatz (mit ResponseEntity-Objekt) ausprobieren ermöglicht es Ihnen, den eingehenden Nachrichtentyp zu ermitteln und die entsprechende Nachricht zu erstellen (auch die @ResponseBody-Annotation zu löschen)
Sie können ContentNegotiationConfigurer
Zuerst sollten Sie die Methode configureContentNegotiation
in Ihrer Konfigurationsklasse überschreiben:
favorParameter(true)
- Aktivieren von Pfadausdrücken über Parameter- oder Accept-Header.
defaultContentType(MediaType.APPLICATION_JSON)
- Legt den Standardinhaltstyp fest. Das heißt, wenn Sie keinen Pfadausdruck übergeben, generiert Spring JSON als Antwort.
mediaType("xml", MediaType.APPLICATION_XML)
- legt den Pfadausdruckschlüssel für XML fest.
Wenn Sie Ihren Controller jetzt wie folgt deklarieren:
%Vor% und nennen es so etwas wie localhost:8080/app/accounts.json
, dann wird Spring JSON als Antwort erzeugen. Wenn Sie also localhost:8080/app/accounts.xml
aufrufen, erhalten Sie eine XML-Antwort
Weitere Informationen zu diesem finden Sie hier .
Tags und Links java rest spring-boot