1. Descripción del problema:
En el programa web de SprinVMVC, envío la solicitud de publicación de AJAX en la página y luego uso @RequestBody para recibir los parámetros en el cuerpo de solicitud en el servidor. Durante la ejecución, quería que el servidor enviara la solicitud AJAX. El navegador seguía retroaltando 415 tipo de medios no compatible o código de estado 400, pensando que había algo mal con la escritura de AJAX. Después de buscar la información durante mucho tiempo, descubrí que falta algo en la configuración del archivo Spring-MVC.Config. Por supuesto, también es posible que realmente se esté perdiendo la configuración del parámetro de tipo de contenido en AJAX. Después del análisis, debería tener un problema con la configuración del archivo SpringMVC-Config.xml.
(Nota): 400: (solicitud de error) El servidor no comprende la sintaxis de la solicitud. 415: (Tipo de medio no compatible) El formato solicitado no es compatible con la página solicitada.
2. Solución:
En el archivo SpringMVC-Config.xml, se agrega un convertidor de información de solicitud de StringHttPMessageConverter, y el fragmento de configuración es el siguiente:
<! --- stringhttpMessageConverter bean-> <bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.stringhttpmessageConverter"/> <! = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <Property name = "MessageConverters"> <List> <Ref Bean = "MAPPINGJACKSONHTTPMessageConverter" /> <!-New StringMessageConverter Bean Bean = "JsonhttpMessageConverter"/> <ref bean = "formhttpmessageConverter"/> </ list> </property> </ bean>
3. Introducción al convertidor de información de solicitud de httpmessageConverter:
La interfaz HTTPMessageConverter especifica un convertidor que puede convertir la información de solicitud HTTP y la información de respuesta HTTP en formato. Por lo general, existen los siguientes convertidores que implementan la interfaz httpmessageConverter:
BytearrayhttpMessageConverter: responsable de leer datos de formato binario y escribir datos de formato binario;
StringHttpMessageConverter: responsable de leer datos de formato de cadena y escribir datos de formato binario;
ResourcehttpMessageConverter: responsable de leer archivos de recursos y escribir datos de archivos de recursos;
FormhttpMessageConverter: responsable de la lectura de datos enviados por formulario (el formato de datos que se puede leer es aplicación/x-www-form-urlencoded, y no puede leer datos de formato multipart/formato); Responsable de escribir datos en formatos de aplicaciones/x-www-from-urlencoded y multipart/formatos de formato;
MAPPINGJACKSONHTTPMESSAGEConverter: responsable de leer y escribir datos en formato JSON;
SourceHttpMessageConverter: responsable de leer y escribir datos definidos por javax.xml.transform.source en xml;
Jaxb2rooTelementHttpMessageConverter: responsable de leer y escribir datos en el formato de etiqueta XML;
AtomFeedHttpMessageConverter: responsable de leer y escribir datos en formato Atom;
RSSCHANNELHTTPMESSAGEConverter: responsable de leer y escribir datos en formato RSS;
Para obtener más información sobre httpmessageConverter, consulte:
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/httpmessageConverter.html
4. Proceso de ejecución del convertidor de información de solicitud de Solicitud de HTTPMessageConverter:
Cuando el usuario envía una solicitud, la anotación @RequestBody leerá los datos en el cuerpo de solicitudes. El convertidor de solicitud predeterminado httpMessageConverter confirma el formato de datos del encabezado de solicitud al obtener el tipo de contenido en el encabezado de solicitud, adaptando así al convertidor apropiado a los datos de solicitud. Por ejemplo, ContentType: Applicin/JSON, el convertidor se adaptará a MappingjacksonhttpMessageConverter. Del mismo modo, la anotación @ResponseBody permitirá a HttpMessageConverter detectar la propiedad de Aceptar en el encabezado para adaptar el convertidor de respuesta.
Resumir:
Cuando se use SpringMVC para la recepción de datos del servidor, especialmente al hacer solicitudes de AJAX, preste especial atención a la configuración del atributo ContentType y acepte el atributo, y configure el convertidor correspondiente en SpringMVC-Config.xml. Cuando usamos SpringMVC para hacer solicitudes AJAX, algunos métodos usan el método Response.getWriter (). Print (). Otro método mejor es agregar la anotación @ResponseBody para devolver directamente los datos del tipo de mapa, y el convertidor lo convierte automáticamente en el tipo de datos JSON.