2016-06-28 7 views
2

Ich habe eine Client-Anwendung, die veraltet ist und sendet die Anfrage Headeer als Content-Type: json anstelle von Content-Type: application/json.wie benutzerdefinierte Inhaltstyp als JSON im Frühjahr mvc hinzufügen?

Es gibt keine Möglichkeit (in naher Zukunft) die Client-Anwendung geändert werden kann. Ich implementiere die Dienste mit Spring und ich habe fast den Endpunkt funktioniert, aber nur, wenn Content-Type application/json ist. Wenn "json" als Inhaltstyp festgelegt ist, erhalte ich 415 nicht unterstützten MediaType-Fehler, was sinnvoll ist.

Wie kann ich dieses Problem umgehen, wäre ein Hack für eine kurzfristige Korrektur ideal

Das funktioniert aber erfordert den Client den Header als „application/json“

@RequestMapping(value="person", method = RequestMethod.POST, consumes="application/json") 
    @ResponseBody 
    public List<PersonProfile> getProfiles (@RequestBody Wrapper wrapper) { 

Diese zu schicken fehlgeschlagen beim Start des Containers

@RequestMapping(value="person", method = RequestMethod.POST, consumes="json") 
    @ResponseBody 
    public List<PersonProfile> getProfiles (@RequestBody Wrapper wrapper) { 

Antwort

0

415 nicht unterstützter MediaType-Fehler.

Ich kenne Ihren Ajax-Code nicht.

Aber Sie lesen in jquery Dokument. vielleicht lösen

content

content (Standard: 'application/x-www-form-urlencoded; charset = UTF-8') Typ: Boolean oder String Wenn Daten an den Server gesendet , verwende diesen Inhaltstyp. Der Standardwert ist "application/x-www-form-urlencoded; charset = UTF-8", was in den meisten Fällen gut ist. Wenn Sie einen Inhaltstyp explizit an $ .ajax() übergeben, wird er immer an den Server gesendet (auch wenn keine Daten gesendet werden). Ab jQuery 1.6 können Sie false übergeben, um jQuery mitzuteilen, dass kein Inhaltstypheader festgelegt werden soll. Hinweis: Die W3C XMLHttpRequest-Spezifikation schreibt vor, dass der Zeichensatz immer UTF-8 ist. Wenn Sie einen anderen Zeichensatz angeben, wird der Browser nicht gezwungen, die Codierung zu ändern. Hinweis: Bei domänenübergreifenden Anfragen wird durch das Festlegen des Inhaltstyps auf etwas anderes als application/x-www-form-urlencoded, multipart/form-data oder text/plain der Browser dazu veranlasst, eine Preflight-OPTIONS-Anfrage an den Server zu senden.

datatype

datatype (Standard: Intelligente Raten (xml, json, ein Skript oder html)) Typ: String Die Art der Daten, die Sie vom Server erwarten sind zurück . Wenn keine angegeben ist, wird jQuery versuchen, basierend auf dem MIME-Typ der Antwort eine Antwort zu erhalten (ein XML-MIME-Typ liefert XML, in 1.4 wird JSON ein JavaScript-Objekt ergeben, in 1.4 wird Skript ausgeführt und alles andere wird ausgeführt als String zurückgegeben). Die verfügbaren Typen (und das Ergebnis, das als erstes Argument an Ihren Erfolgsrückruf übergeben wurde) sind: "xml": Gibt ein XML-Dokument zurück, das über jQuery verarbeitet werden kann. "html": Gibt HTML als einfachen Text zurück; Eingeschlossene Skript-Tags werden ausgewertet, wenn sie in das DOM eingefügt werden. "Skript": Evaluiert die Antwort als JavaScript und gibt sie als Nur-Text zurück. Deaktiviert das Zwischenspeichern, indem der Parameter "= [TIMESTAMP]" an den URL angefügt wird, sofern die Cache-Option nicht auf "true" festgelegt ist. Hinweis: Dadurch werden POSTs zu GETs für Remotedomänenanforderungen. "json": Evaluiert die Antwort als JSON und gibt ein JavaScript-Objekt zurück.Domänenübergreifende "json" -Anforderungen werden in "jsonp" konvertiert, es sei denn, die Anforderung enthält jsonp: false in ihren Anforderungsoptionen. Die JSON-Daten werden streng analysiert. Jegliche fehlerhafte JSON wird zurückgewiesen und ein Parse-Fehler wird ausgelöst. Ab jQuery 1.9 wird eine leere Antwort ebenfalls abgelehnt. Der Server sollte stattdessen eine Antwort von null oder {} zurückgeben. (Weitere Informationen zur korrekten JSON-Formatierung finden Sie unter json.org.) "jsonp": Wird in einem JSON-Block mit JSONP geladen. Fügt ein zusätzliches "? Callback =?" an das Ende Ihrer URL, um den Rückruf festzulegen. Deaktiviert das Zwischenspeichern durch Anhängen eines Abfragezeichenfolgenparameters " = [TIMESTAMP]" an den URL, sofern die Cacheoption nicht auf "true" festgelegt ist. "Text": Eine einfache Textzeichenfolge. Mehrere durch Leerzeichen getrennte Werte: Ab jQuery 1.5 kann jQuery einen Datentyp so konvertieren, wie er in der Content-Type-Kopfzeile empfangen wurde. Wenn Sie beispielsweise eine Textantwort als XML behandeln möchten, verwenden Sie "text xml" für den Datentyp. Sie können auch eine JSONP-Anfrage erstellen, sie als Text empfangen und von jQuery als XML interpretieren: "jsonp text xml". In ähnlicher Weise wird eine Kurzzeichenfolge wie "jsonp xml" zuerst versuchen, von jsonp nach xml zu konvertieren, und andernfalls von jsonp in Text und dann von text in xml konvertieren.

Und Sie müssen nach konsumieren und produzieren suchen.

Sie falsch mit konsumiert ..

Verwandte Themen