1. Problembeschreibung:
In SprinvMVCs Webprogramm sende ich die Postanforderung von AJAX auf der Seite und benutze dann @RequestBody, um die Parameter im Anforderungskörper auf dem Server zu empfangen. Während des Laufs wollte ich, dass der Server eine Ajax -Anfrage sendet. Der Browser hat Feedbacking 415 nicht unterstütztes Medientyp oder 400 Statuscode angehalten und dachte, dass mit dem Schreiben von Ajax etwas nicht stimmte. Nachdem ich lange nach den Informationen gesucht hatte, stellte ich fest, dass in der Konfiguration der Spring-MVC.Config-Datei etwas fehlte. Natürlich ist es auch möglich, dass Sie die Einstellungen des Parameters vom Inhaltsart in AJAX wirklich fehlen. Nach der Analyse sollte ich ein Problem mit der Konfiguration von SpringMVC-config.xml-Datei haben.
(Hinweis): 400: (Fehleranforderung) Der Server versteht die Syntax der Anforderung nicht. 415: (Nicht unterstützter Medientyp) Das angeforderte Format wird nicht von der angeforderten Seite unterstützt.
2. Lösung:
In der Datei SpringMVC-config.xml wird ein StringHttpMessageConverter-Anforderungsinformationskonverter hinzugefügt, und das Konfigurationsfragment lautet wie folgt:
<! --- StringHttpMessageConverter Bean-> <bean id = "StringhttpMessageConverter" class = "org.springframework = "org.springframework.web.servlet.mvc.annotation /> <ref bean = "jsonhttpMessageConverter" /> <ref bean = "formHttpMessageConverter" /> < / list> < / property> < / bean>
A.
Die HTTPMessageConverter -Schnittstelle gibt einen Konverter an, der HTTP -Anforderungsinformationen und HTTP -Antwortinformationen in Format umwandeln kann. In der Regel gibt es die folgenden Konverter, die die HTTPMessageConverter -Schnittstelle implementieren:
BytearrayhttpMessageConverter: Verantwortlich für das Lesen von Daten von Binärformat und das Schreiben von Daten mit Binärformat;
StringHttpMessageConverter: Verantwortlich für das Lesen von String -Formatdaten und das Schreiben von Binärformatdaten;
ResourcehttpMessageConverter: Verantwortlich für das Lesen von Ressourcendateien und das Schreiben von Ressourcendateidaten;
FormHTTPMessageConverter: Verantwortlich für das Lesen von Daten, die über das Formular übermittelt wurden (das Datenformat, das gelesen werden kann, ist die Anwendung/x-www-form-rursenkodiert. Verantwortlich für das Schreiben von Daten in der Anwendung/x-www-from-rencoded und in mehrteiligen/Form-Daten-Formaten;
MapingjacksonhttpMessageConverter: Verantwortlich für das Lesen und Schreiben von Daten im JSON -Format;
SourceHttpMessageConverter: Verantwortlich für das Lesen und Schreiben von Daten, die von javax.xml.transform.Source in XML definiert sind;
JAXB2RootElementHttpMessageConverter: Verantwortlich für das Lesen und Schreiben von Daten im XML -Tag -Format;
AtomfeedhttpMessageConverter: Verantwortlich für das Lesen und Schreiben von Daten im Atomformat;
RsschannelhttpMessageConverter: Verantwortlich für das Lesen und Schreiben von Daten im RSS -Format;
Weitere Informationen zu httpMessageConverter finden Sie unter:
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/httpMessageConverter.html
4.HttpMessageConverter Anfrage Information Converter Ausführungsprozess:
Wenn der Benutzer eine Anfrage sendet, wird die Annotation @RequestBody die Daten in der Anforderungsbehörde lautet. Der Standardanforderungskonverter httpMessageConverter bestätigt das Datenformat des Anforderungsheaders, indem er den Inhaltstyp im Anforderungsheader abfasst und damit den entsprechenden Konverter an die Anforderungsdaten anpasst. Beispielsweise wird ContentType: Applicatin/JSON, der Konverter an mapingjacksonhtpMessageConverter angepasst. In ähnlicher Weise ermöglicht die @ResponseBody -Annotation httpMessageConverter, die Akzeptanzeigenschaft im Header zu erkennen, um den Antwortkonverter anzupassen.
Zusammenfassen:
Bei Verwendung von SpringMVC für den Serverdatenempfang, insbesondere bei AJAX-Anforderungen, achten Sie besonders auf die Einstellungen des ContentType-Attributs und akzeptieren Sie den entsprechenden Konverter in SpringMVC-config.xml. Wenn wir SpringMVC verwenden, um AJAX -Anforderungen zu erstellen, verwenden einige Methoden die Antwort.getWriter (). Print (). Eine weitere bessere Methode besteht darin, die Annotation von @ResponseBody hinzuzufügen, um die Daten zum Kartentyp direkt zurückzugeben, und der Konverter konvertiert sie automatisch in den JSON -Datentyp.