1. Introducción
Este artículo presenta principalmente cómo usar los servicios de backend de SpringMVC para admitir múltiples tipos de valor de retorno (XML, JSON, HTML, Excel) a través de la configuración.
El código aquí usa SpringBoot, Descargar dirección: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. Conceptos básicos
2.1 La diferencia entre la configuración de tipo de contenido y aceptar en httpheader
Aceptar: la interfaz devolverá el formato de datos al cliente
Curl -Header 'Aceptar: Aplicación/JSON' http: // Localhost: 8080/TODO
Tipo de contenido: el formato de datos enviado por el cliente al servidor
Curl -x Put - -Header 'Content -Type: Application/JSON' -D '{"Título": "Horario de fin de semana", "Contenido": "Sleep"}' http: // localhost: 8080/todo2.2 Dos formas de generar salida en SpringMVC
1) Cuando el servidor usa el método RESTFUL para proporcionar solo datos para el AJAX del cliente u otras solicitudes del servidor, @ResponseBody generalmente se usa para identificar su devolución. En este momento, Spring usa httpmessageConverter para formatear el objeto devuelto en el formato requerido.
2) Cuando necesita proporcionar una capa de presentación (como HTML), SpringMVC utiliza ViewResolver para procesar su devolución.
A veces su aplicación tiene que proporcionar ambos
2.3 Determinación del formato de salida SpringMVC
Muchas veces, para admitir múltiples sistemas o múltiples terminales, debe generar los mismos datos en diferentes manifestaciones.
SpringMVC utiliza ContentNegotationStrategy para determinar qué formato de datos solicita el usuario para obtener.
ContentNegotationTrategy utiliza tres formas de identificar qué tipo de datos quiere devolver el usuario
Consulte la configuración a continuación
@OverridePublic void configurReContentNegotiation (ContentNegotiationConfigurer Configure) {configure.favorPathExtension (false) .favorParameter (true) .ParamTername ("Mediatype") .DefeftentType (Mediatype.application_json) .mediatype ("XML", Mediatype.Application .mediatype ("html", mediatype.text_html) .mediatype ("json", mediatype.application_json);}Agregue la configuración anterior al WebMVCConfig de su proyecto, lo que significa cerrar la regla del sufijo URL, abrir la regla de parámetros de solicitud y configurar el parámetro de solicitud en 'Mediatype'. El formato de retorno predeterminado es JSON, y también admite devolver XML y HTML.
Estos tres componentes son la clave para devolver salidas en diferentes formatos.
2.4 requestMappings
2.4.1 SELICITSMAPPingHandLermapping
Lo que usualmente usamos en la primavera es requestmappinghandlermapping. Según RequestMappingInfo, refinamos las condiciones de correspondencia. El proceso de búsqueda general es el siguiente:
Abstractthandlermethodmapping interfaz de implementación gethandlerinternal
1. Use UrlPathHelper para encontrar la ruta correspondiente a la solicitud
2. Encuentre el metro de handlerm correspondiente a la ruta
2.1 Encuentra condiciones coincidentes de URLMAP SolicmingMappingInfo
2.2 Si la condición coincidente se encuentra en el valor equivalente, agrégala a la condición de coincidencia
2.3 Si no se encuentra una condición de coincidencia, use requestmappingInfo de todos los metros manejadores para que coincidan
2.4 Ordene los partidos, elimine la coincidencia de más alta prioridad y verifique si es la única prioridad más alta
2.5: Encapsula las dos situaciones donde las condiciones coinciden y las condiciones no coinciden.
3. Encapsule el metro de handlermethod para garantizar que la instancia del bean se almacene en el ContentNegotiationManager, que proporciona una comparación de las condiciones de coincidencia para MinyPe, para que el marco pueda coincidir con el método de procesamiento más apropiado.
2.5 httpmessageConverter
2.5.1 Los convertidores de mensajes predeterminados
SpringMVC cargará los siguientes httpmessageConverters de forma predeterminada:
BytearrayhttpMessageConverter Convierts Byte ArraySstringhttpMessageConverter Convertir StringsresurcehttpMessageConverter Convertir Org.springframework.core.io.resource para cualquier tipo de octet StreamSourcehttpmessessageConver convertirs convertidos javax.xml.transform.sourceFormhttpMessageConverter Convierte los datos de formulario a/desde un multivaluEmap <string, string> .Jaxb2ROOTELEMENTHTTPMessAsageConverter Convierte los objetos Java a/desde XML (agregado solo si Jaxb2 está presente en el classpath) MappPingjackSon2htttttttttttttttttttttTpMess JSON (agregado solo si Jackson 2 está presente en el classpath) MappingjacksonhttpMessageConverter Convertir JSON (agregado solo si Jackson está presente en la classpath) AtomFeedhttpMessageConverter Convertir Atomeds (Se agregó solo si Roma está presente en la classpath) rsschannelhtttpMessArtter Converter RSS -RSTS RSFETS RSITS RSME RSMO RSMO RSMO está presente en la classpath)
Si devolvemos lo identifican @ResponseBody, el marco usará httpmessageConverter para procesar el valor de retorno. El XMLCoverter predeterminado no es particularmente útil y depende de la anotación @xmlrootelement en el objeto Entity. No es muy conveniente. Por lo tanto, presentamos la biblioteca de clase auxiliar y personalizamos el MessageConverter para que el objeto devuelto pueda procesarse directamente en el formato XML.
Biblioteca de importación de gradle
grupo de compilación: 'org.springframework', nombre: 'spring-oxm', versión: '4.3.9.Release'Compile Group:' com.thoughtworks.xstream ', nombre:' xstream ', versión:' 1.4.10 '
Configuración
@OverridePublic Void ConfigurEMessAgeconverters (List <HttpMessageConverter <? >> Converters) {Converters.Add (CreateExMlHTTPMessageConverter ()); super.configuremessageConverters (convertidores);} private httpmessageConverter <SPEt> createExmlhttpMessageConverter () {marshallinghttpmessageConverter xmlConverter = new MarshallingHttpMessageConverter (); Xstreammarshaller xstreammarshaller = new xStreamMarShaller (); xmlConverter.SetMarShaller (xstreammarshaller); xmlConverter.setUnmarshaller (xstreammarshaller); return xmlConverter;}2.6 Resolución de vista
2.6.1 Page Render (Freemarker)
Cuando necesite regresar a la página, debe dibujar la imagen por una ViewResolver adecuada, y aquí usa Freemarker como motor de página.
Biblioteca de importación de gradle
compile ("org.springframework.boot: spring-boot-starter-freemarker")Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.