Beim Erstellen von Rastful -Datendiensten haben wir Controller und Repositorys definiert und sie mit einigen Annotationen geändert. Bisher haben wir jedoch keine Objektkonvertierung durchgeführt - die Konvertierung von Java -Entitätsobjekten in HTTP -Datenausgabeströme. Die zugrunde liegende Ebene von Spring Boot verwendet HTTPMessageConverters, um Java -Entitätsklassen in das JSON -Format auszugeben, indem sie sich auf die Jackson -Bibliothek verlassen. Wenn mehrere Konverter verfügbar sind, wählen Sie den am besten geeigneten Konverter entsprechend dem Meldungsobjekttyp und dem erforderlichen Inhaltstyp aus.
In dem Artikel httpMessageConverter, SpringMVC -Quellcodeanalyse, gibt es ein Diagramm, das deutlich den Ort des Nachrichtenkonverters anzeigt.
Standort des Nachrichtenkonverters
Das Ziel des Nachrichtenkonverters ist: Die Konvertierung des HTTP -Eingangsanforderungsformats in Java -Objekte; Die Konvertierung von Java -Objekten in HTTP -Ausgabemittelanforderungen. Einige Nachrichtenkonverter unterstützen nur mehrere Datentypen, einige unterstützen mehrere Ausgangsformate und andere beides. Zum Beispiel: Mappingjackson2HttpMessageConverter kann Java-Objekte in Application/JSON konvertieren, während protobufhttpMessageConverter nur Eingaben von com.google.Protobuf.message unterstützt, aber die Ausgabe von Anwendungen/JSON, Anwendung/XML, Text/Plain und Apply/X-Protobuf.
Wie
Es gibt drei Möglichkeiten, den Nachrichtenkonverter im Projekt zu konfigurieren. Der Hauptunterschied besteht darin, die Anpassbarkeit und Benutzerfreundlichkeit zu messen.
Fügen Sie @Bean Definition zur WebConfiguration -Klasse hinzu
@BeanPublic BytearrayhttpMessageConverter BytearrayhttpMessageConverter () {Neue BytearrayhttpMessageConverter ();};}; Überschreiben Sie die Methode configuremessAgeConverters, um die vorhandene L -linked Message Converter -Liste zu erweitern.
@Overridepublic void configuremessageConverters (Liste <httpMessageConverter <? >> konverters) {Converters.Add (Neue ByteArrayHttpMessageConverter ());};};};};};}; Für mehr Kontrolle können Sie die ExtendMessageConverters -Methode umschreiben, zuerst die Konverterliste löschen und dann einen benutzerdefinierten Konverter hinzufügen.
@Overridepublic void extendMessageConverters (Liste <httpMessageConverter <? >> Konverter) {konverters.clear (); Converters.Add (neue BytearrayhttpMessageConverter ());}analysieren
Spring bietet mehrere Möglichkeiten, um dieselbe Aufgabe zu erfüllen, und welche ausgewählt wird, hängt davon ab, ob wir uns mehr auf die Bequemlichkeit oder die Anpassung konzentrieren.
Was sind die Unterschiede zwischen den drei oben genannten Methoden?
Das Definieren von httpMessageConverter über @Bean ist der einfachste Weg, um Ihrem Projekt einen Nachrichtenkonverter hinzuzufügen, ähnlich der oben genannten Hinzufügung von Servlet -Filtern. Wenn Feder zu einer Bohne vom Typ httpMessageConverter scannt, wird sie automatisch zur Anrufkette hinzugefügt. Es wird empfohlen, die Webconfiguration im Projekt von WebMVCConFigurerAdapter zu erben.
Es ist zweckmäßig, einen benutzerdefinierten Konverter hinzuzufügen, indem die Methode configuremessageConverters neu geschrieben wird. Es gibt jedoch eine Schwäche: Wenn es mehrere Instanzen von WebMVCConfigurern im Projekt gibt (das uns standardmäßig definiert oder durch Spring -Start bereitgestellt wird) wird nicht garantiert, dass die Recrite -Konfiguremessag -Zusammenstellung in einer festen Bestellung garantiert wird.
Wenn mehr granuläre Kontrolle benötigt wird: Löschen anderer Nachrichtenkonverter oder klar doppelte Konverter, kann dies durch Umschreiben von ExtendMessageConverters erfolgen, und es gibt immer noch diese Möglichkeit: Andere WebMVCConFigurer -Instanzen können diese Methode auch umschreiben, aber die Chance ist sehr gering.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.