Ich glaube, dass Entwickler, die Spring verwendet haben, @RequestBody und @ResponseBody Anmerkungen verwendet haben und die Eingabe direkt in JSON und die Ausgabe in JSON analysieren können. HTTP-Anforderungen und Antworten sind jedoch textbasiert, was bedeutet, dass der Browser und der Server durch Austausch von Originaltext kommunizieren.
HttpMessageConverter
Das HTTP -Anfrage -Antwortpaket ist tatsächlich eine Zeichenfolge. Wenn die Anforderungsnachricht in ein Java -Programm eingegeben wird, wird sie in einen ServletInputStream -Stream eingekapselt. Der Entwickler liest die Nachricht und das Antwortpaket gibt das Antwortpaket über den ServletoutputStream -Stream aus.
Nur das Original -String -Paket kann aus dem Stream gelesen werden, und das Gleiche gilt für den Ausgabestream. Wenn dann die Nachricht bei SpringMVC/Springboot eintrifft und aus SpringMVC/Springboot beendet, besteht ein Problem beim Umwandeln von Zeichenfolgen in Java -Objekte. Dieser Prozess wird in SpringMVC/Springboot durch httpMessageConverter gelöst. HttpMessageConverter Interface Quellcode:
public interface httpMessageConverter <t> {boolean canread (Klasse <?> clazz, mediType mediType); Boolean Canwrite (Klasse <?> Clazz, mediType mediType); Liste <MediasType> getSupportedMediTypes (); T Read (Klasse <? Erweitert T> Clazz, httpinputMessage InputMessage) löst IOException, httpMessagenotreadableException aus; void write (t t, minytype contentType, httpoutputMessage outputMessage) löst ioException, httpMessagenotwritable -Exception aus;}Hier ist ein Beispiel zu veranschaulichen,
@RequestMapping ("/test")@responseBodypublic String (@RequestBody String Param) {return "param '" + param + "'";}Bevor die Anforderung in die Testmethode eingeht, wird die entsprechende httpMessageConverter -Implementierungsklasse gemäß der @RequestBody -Annotation ausgewählt, um die Anforderungsparameter in die Param -Variable zu analysieren. Da die Parameter hier von String sind, wird hier die StringHttpMessageConverter -Klasse verwendet. Die Methode canread () gibt true zurück, und dann wird die Read () -Methode die Anforderungsparameter aus der Anforderung gelesen und an die Param -Variable der Test () -Methode binden.
In ähnlicher Weise, wenn die Testmethode ausgeführt wird, verwendet SpringMVC/Springboot, da der Rückgabewert @ResponseBody identifiziert, die Schreibmethode von StringHttpMessArverter und das Ergebnis als String -Wert in die Antwortmeldung schreiben. Natürlich gibt die Canwrite () -Methode zu diesem Zeitpunkt wahr zurück.
Leihen Sie die folgende Abbildung aus, um den gesamten Prozess kurz zu beschreiben:
Während der Federverarbeitung werden eine Anforderungsnachricht und eine Antwortnachricht in eine Anforderungsnachricht httpInputMessage und eine Antwortnachricht httpoutputMessage abstrahiert.
Bei der Bearbeitung einer Anforderung bindet der entsprechende Nachrichtenkonverter die Anforderungsnachricht in ein formales Parameterobjekt in der Methode. Hier kann es in demselben Objekt mehrere verschiedene Nachrichtenformulare wie JSON und XML geben. Gleiches gilt für die Beantwortung von Anfragen.
Im Frühjahr gibt es für verschiedene Nachrichtenformulare unterschiedliche HTTPMessageConverter -Implementierungsklassen, um verschiedene Nachrichtenformulare zu verarbeiten. In Bezug auf die verschiedenen Implementierungen verschiedener Nachrichten analysiert, befinden sie sich in verschiedenen HTTPMessageConverter -Implementierungsklassen.
Ersetzen
Hier ist ein Beispiel für Springboot. In SpringMVC/Springboot verwendet die @RequestBody Annotation Jackson standardmäßig JSON. Siehe das folgende Beispiel:
@Controller @RequestMapping ("/user") öffentliche Klasse UserController {@RequestMapping ("/testt") @RespondenBody public user testt () {user user = new user ("name", 18); Benutzer zurückgeben; }} public class User {private String -Benutzername; privates Ganzzahlalter; privates Ganzzahl -Telefon; private Zeichenfolge E -Mail; public user (String -Benutzername, ganzzahliger Alter) {Super (); this.username = userername; this.age = Alter; }}Browserzugriff /Benutzer /Testt gibt wie folgt zurück:
Dies ist das Ergebnis der Verwendung von Jackson Parsing. Jetzt werden wir es in das Fastjson -Parsing -Objekt ändern. Hier ersetzen wir den Standard -HttpMessageConverter, was bedeutet, dass FastjsonHttpMessageConverter verwendet wird, um die Konvertierung zwischen Java -Objekten und httpinputMessage/httpoutputMessage zu verarbeiten.
Erstellen Sie zunächst eine neue Konfigurationsklasse, um die Konfiguration FastjsonHttpMessageConverter hinzuzufügen. Spring 4.x empfiehlt die Verwendung einer Java -Konfigurationsannotationsmethode, dh es gibt keine XML -Datei, und Springboot ist noch mehr.
import com.alibaba.fastjson.serializer org.springframework.boot.autoconfigure.web.httpMessageConverters; import org.springFramework.context.annotation.bean; java.nio.charset.charset; @ConfigurationPublic Class httpMessageConverterConfig {// Fastjson einführen, um JSON zu analysieren, verwenden Sie nicht das Standard -Jackson // Das Fastjson -Jar -Paket muss in pom.xml eingeführt werden, und die Version muss mehr als 1.2.10 @Bean Public Httpmesagconverters sein. fastjsonHttpMessageConverters () {// 1. Definieren Sie ein Objekt, das die Meldung FastjsonHttpMessageConverter FastConverter = New FastjsonHttpMessageConverter () konvertiert; // 2. Fügen Sie Fastjson -Konfigurationsinformationen FASTJSONCONFIG FASTJSONCONFIG = New FastjsonConfig (); SerializerFeature [] serializerFeatures = new SerializerFeature [] {// Der Ausgangstaste ist ein doppeltes Zitat // serializerFeature.quotefieldNames, // Ob ein Feld als Null ausgeht, wenn es null ist, wird das Feld angezeigt // SerializerFeature.writemapnallvalue, // If thesththestht -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -the -field ist das Ausgang. SerializerFeature.writenullNumberaszero, // Wenn das Listenfeld null ist, ist die Ausgabe [], nicht null serializerFeature.writenulllistasempty, // Wenn das Zeichen des Charaktertyps null ist, ist die Ausgabe "", nicht null serializerFeature SerializerFeature.writeNullbooleanasfalse, // Date Converter SerializerFeature.writedateUseUtateFormat, // Rundschreiben Referenz SerializerFeature.DisableCircularReferenceTect,}; fastjsonConfig.setSerializerFeatures (SerializerFeatures); fastjsonConfig.setcharset (charset.forname ("utf-8")); // 3. Fügen Sie Konfigurationsinformationen in CONVERT FASTCONVERTER.SETSFACTJSONCONFIG (FASTJSONCONFIG); // 4. Fügen Sie Konvertiten in Konvertiten zu konvertieren. RECHTEN SIE NEU HTTPMESSAGECONVERTERTER (Konverter); }}Wenn der Wert des String -Typs NULL ist, gibt er "", wenn der Wert von NULL 0 zurückgibt, die Anwendung neu starten, die /user /testt -Schnittstelle erneut zugreifen und wie folgt zurückgeben:
Sie können sehen, dass Null zu diesem Zeitpunkt in "" oder 0 konvertiert wird.
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.