En el proceso de construcción de servicios de datos RESTful, definimos controladores y repositorios y los modificamos con algunas anotaciones, pero hasta ahora no hemos realizado conversión de objetos, convirtiendo objetos de entidad Java en flujos de salida de datos HTTP. La capa subyacente de Spring Boot utiliza httpmessageConverters para generar clases de entidad Java en formato JSON confiando en la Biblioteca Jackson. Cuando hay disponibles múltiples convertidores, seleccione el convertidor más adecuado para usar de acuerdo con el tipo de objeto de mensaje y el tipo de contenido requerido.
En el artículo HttpMessageConverter, análisis del código fuente de SpringMVC, hay un diagrama que indica claramente la ubicación del convertidor de mensajes.
Ubicación del convertidor de mensajes
El objetivo del convertidor de mensajes es: la conversión del formato de solicitud de entrada HTTP en objetos Java; La conversión de objetos Java a solicitudes de salida HTTP. Algunos convertidores de mensajes solo admiten múltiples tipos de datos, algunos admiten múltiples formatos de salida y otros proporcionan ambos. Por ejemplo: Mappingjackson2httpMessageConverter puede convertir los objetos Java a Application/JSON, mientras que ProtoBufhttpMessageConverter solo admite las entradas de com.google.protobuf.message, pero puede emitir aplicaciones/json, aplicación/xml, texto simple y aplicación/x-protoBuf.
Como
Hay tres formas de configurar el convertidor de mensajes en el proyecto, la principal diferencia es la medición de la personalización y la facilidad de uso.
Agregar definición de @Bean a la clase de Configuración web
@BeanPublic bytearrayHttpMessageConverter bytearrayHttpMessageConverter () {return new bytearrayHttpMessageConverter ();} Anular el método ConfigureMessageConverters para extender la lista vinculada del convertidor de mensajes existente;
@OverridePublic Void ConfigureMessageConverters (List <HttpMessageConverter <? >> Converters) {Converters.Add (new BytearrayHttpMessageConverter ());} Para obtener más control, puede reescribir el método ExtendMessageConverters, primero borrar la lista del convertidor y luego agregar un convertidor personalizado.
@OverridePublic Void ExtendMessageConverters (List <HttpMessageConverter <? >> Converters) {Converters.Clear (); convertidores.add (new bytearrayhttpMessageConverter ());}analizar
Spring proporciona múltiples formas de realizar la misma tarea, y cuál se elige depende de si nos centramos más en la conveniencia o la personalización.
¿Cuáles son las diferencias entre los tres métodos mencionados anteriormente?
Definir httpmessageConverter a través de @Bean es la forma más fácil de agregar un convertidor de mensajes a su proyecto, similar a la adición mencionada de filtros de servlet. Si la primavera escanea a un frijol de tipo httpmessageConverter, se agregará automáticamente a la cadena de llamadas. Se recomienda heredar la configuración web en el proyecto desde WebMVCConfigurerAdapter.
Es conveniente agregar un convertidor personalizado reescribiendo el método ConfigureMessageConverters, pero existe una debilidad: si hay múltiples instancias de WebMVCConfigurers en el proyecto (que definimos o proporcionamos por Spring Boot de forma predeterminada), no está garantizado que el método de ReescribeMessesSageConverters se ejecute en un orden fijo.
Si se necesita más control granular: borrar otros convertidores de mensajes o claramente convertidores duplicados, se puede hacer reescribiendo ExtendMessageConverters, y todavía existe esta posibilidad: otras instancias de WebMVCCONFIGURER también pueden reescribir este método, pero la posibilidad es muy pequeña.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.