Ich habe eine einfache REST-Controller in einer Spring-Boot-Anwendung geschrieben, aber ich bin mir nicht sicher, wie die Inhaltsverhandlung zu JSON oder XML auf der Grundlage der Content-Type-Parameter im Anfrage-Header zurückgeben zu implementieren . Könnte mir jemand erklären, was mache ich falsch?Spring Boot-Controller Inhalt Verhandlung
Controller-Methode:
@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public Message getMessageXML(@RequestParam("text") String text) throws Exception {
Message message = new Message();
message.setDate(new Date());
message.setName("Test");
message.setAge(99);
message.setMessage(text);
return message;
}
ich JSON immer erhalten, wenn Sie diese Methode aufrufen (auch wenn ich die Content-Type
angeben application/xml
oder text/xml
zu sein).
Wenn ich zwei Methoden mit unterschiedlichen Mappings und unterschiedlichen Inhaltstypen implementiere, kann ich XML aus XML holen, aber es funktioniert nicht, wenn ich zwei mediaTypes in einer einzigen Methode (wie im Beispiel) angeben.
Was würde Ich mag es, die \message
Endpunkt anrufen und
- XML empfangen, wenn der Content-Type der GET-Anforderung an application/xml
- JSON gesetzt, wenn der Content-Type-Anwendung ist/json
Jede Hilfe wird geschätzt.
EDIT: ich mein Controller aktualisiert, um alle Medientypen zu akzeptieren
@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE }, consumes = MediaType.ALL_VALUE)
public Message getMessageXML(@RequestParam("text") String text) throws Exception {
Message message = new Message();
message.setDate(new Date());
message.setName("Vladimir");
message.setAge(35);
message.setMessage(text);
return message;
}
Sie müssen einen 'Accept'-Header mit dem Wert' application/xml' oder mit einem der unterstützten Medientypen angeben. – systemfreund
Der Header "Content-Type" definiert, welche Art von Inhalt Sie senden - nicht die, die Sie erhalten möchten (das ist der Header "Accept"). Die Verwendung des Headers "Content-Type" für eine GET-Anfrage funktioniert nicht. Sinnvoll, da kann kein (Body-) Inhalt haben. Also in Ihrem Fall sollten Sie den Header "Accept" für Ihre Anfrage und in der Antwort die "Content-Type" -Kopfzeile verwenden, um den Typ des Inhalts zu nennen tatsächlich senden. –