Dans le processus de création de services de données Restful, nous avons défini les contrôleurs et les référentiels et les avons modifiés avec certaines annotations, mais jusqu'à présent, nous n'avons pas effectué de conversion d'objets - convertir les objets entités Java en flux de sortie de données HTTP. La couche sous-jacente de Spring Boot utilise HttpMessageConverters pour produire des classes d'entités Java au format JSON en s'appuyant sur la bibliothèque Jackson. Lorsque plusieurs convertisseurs sont disponibles, sélectionnez le convertisseur le plus approprié à utiliser en fonction du type d'objet de message et du type de contenu requis.
Dans l'article HttpMessageConverter, l'analyse du code source SpringMVC, il existe un diagramme qui indique clairement l'emplacement du convertisseur de message.
Emplacement du convertisseur de messages
L'objectif du convertisseur de messages est: la conversion du format de demande d'entrée HTTP aux objets Java; La conversion des objets Java en demandes de sortie HTTP. Certains convertisseurs de messages ne prennent en charge que plusieurs types de données, certains prennent en charge plusieurs formats de sortie et certains fournissent les deux. Par exemple: MappingJackSon2HttpMessageConverter peut convertir des objets Java en application / json, tandis que ProtobufhttpMessageConverter ne prend en charge que les entrées de com.google.protobuf.Message, mais peut publier l'application / json, application / xml, text / plaine et application / x-protobuf.
Comment faire
Il existe trois façons de configurer le convertisseur de messages dans le projet, la principale différence est la mesure de la personnalisation et de la facilité d'utilisation.
Ajouter @Bean Definition à la classe WebConfiguration
@BeanPublic bytearrayhttpMessageConverter bytearrayhttpMessageConverter () {return new bytearrayhttpMessageConverter ();} Remplacez la méthode ConfigureMessageConverters pour étendre la liste liée au convertisseur de messages existant;
@OverRidePublic void ConfigureMessageConverters (list <httpMessageConverter <? >> Converters) {converters.add (new ByteArrayhttpMessageConverter ());} Pour plus de contrôle, vous pouvez réécrire la méthode ExtendMessageConverters, effacer d'abord la liste du convertisseur, puis ajouter un convertisseur personnalisé.
@OverridePublic void extendMessageConverters (list <httpMessageConverter <? >> convertisseurs) {converters.clear (); converters.add (new bytearrayhttpMessageConverter ());}analyser
Spring fournit plusieurs façons d'accomplir la même tâche, et celle choisie dépend de savoir si nous nous concentrons davantage sur la commodité ou la personnalisation.
Quelles sont les différences entre les trois méthodes mentionnées ci-dessus?
La définition de HTTPMessageConverter via @Bean est le moyen le plus simple d'ajouter un convertisseur de messages à votre projet, similaire à l'ajout susmentionné de filtres servtiques. Si le printemps scanne un haricot de type HttpMessageConverter, il sera automatiquement ajouté à la chaîne d'appels. Il est recommandé d'hériter de la configuration Web dans le projet de WebMVCConfigureAdapter.
Il est pratique d'ajouter un convertisseur personnalisé en réécrivant la méthode ConfigureMessageConverters, mais il y a une faiblesse: s'il existe plusieurs instances de webmvcconfigurers dans le projet (que nous définissons nous-mêmes ou fournis par la méthode Spring Boot par défaut dans un ordre fixe.
Si plus de contrôle granulaire est nécessaire: effacer d'autres convertisseurs de messages ou des convertisseurs clairement en double, cela peut être fait en réécrivant ExtendMessageConverters, et il y a toujours cette possibilité: d'autres instances WebMvcConfigurer peuvent également réécrire cette méthode, mais la chance est très petite.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.