1. Einführung
In diesem Artikel wird hauptsächlich eingeführt, wie die SpringMVC -Backend -Dienste verwendet werden, um mehrere Rückgabewerttypen (XML, JSON, HTML, EXCEL) durch Konfiguration zu unterstützen.
Der Code hier verwendet Springboot, Download-Adresse: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. Grundlegende Konzepte
2.1 Der Unterschied zwischen Inhaltstyp und Akzeptanzeinstellungen in httpheaderer
Akzeptieren: das Datenformat, das von der Schnittstelle an den Client zurückgegeben werden soll
Curl -Header 'Akzeptieren: Anwendung/JSON' http: // localhost: 8080/todo
Inhaltstyp: Das vom Client an den Server gesendete Datenformat
curl -x put -header 'content -type: application/json' -d '{"title": "weekendplated", "content": "sleep"}' http: // localhost: 8080/todo2.2 Zwei Möglichkeiten, um Ausgang in SpringMVC zu generieren
1) Wenn der Server eine erholsame Methode verwendet, um nur Daten für die AJAX oder andere Serveranforderungen des Clients anzugeben, wird @ResponseBody normalerweise verwendet, um Ihre Rückgabe zu identifizieren. Zu diesem Zeitpunkt verwendet Spring httpMessageConverter, um das zurückgegebene Objekt in das erforderliche Format zu formatieren.
2) Wenn Sie eine Präsentationsschicht (z. B. HTML) bereitstellen müssen, verwendet SpringMVC ViewResolver, um Ihre Rücksendung zu verarbeiten.
Manchmal muss Ihre Bewerbung beide bereitstellen
2.3 SpringMVC -Ausgangsformat Bestimmung
Um mehrere Systeme oder mehrere Terminals zu unterstützen, müssen Sie in verschiedenen Manifestationen dieselben Daten ausgeben.
SpringMVC verwendet ContentNegotationStrategy, um zu bestimmen, welches Datenformat die Benutzer erhalten.
ContentNegotationStrategy verwendet drei Möglichkeiten, um zu identifizieren, welche Art von Daten der Benutzer zurückkehren möchte
Bitte beachten Sie die folgende Konfiguration
@OverridePublic void configureContentNegotiation (ContentNegotiationConFigurer configure) {configurer .mediatype ("html", mediatype.text_html) .mediType ("JSON", mediatype.application_json);}Fügen Sie der obigen Konfiguration der WebMVCConfig Ihres Projekts hinzu, was bedeutet, die Regel des URL -Suffix zu schließen, die Anforderungsparameterregel zu öffnen und den Anforderungsparameter auf 'mediType' festzulegen. Das Standard -Rückgabeformat ist JSON und unterstützt auch die Rückgabe von XML und HTML.
Diese drei Komponenten sind der Schlüssel für die Rückgabe von Ausgängen in verschiedenen Formaten
2.4 RequestMappings
2.4.1 RequestMappingHandlermaping
Was wir normalerweise im Frühjahr verwenden, ist RequestMappingHandlermaping. Laut RequestMappingInfo verfeinern wir die Übereinstimmungsbedingungen. Der Gesamtsuchprozess ist wie folgt:
AbstractHandhermethodmapping -Implementierungsschnittstelle GethandLeNinternal
1. Verwenden Sie Urlpathhelper, um den Pfad zu finden, der der Anforderung entspricht
2. Finden Sie den HandleMethod, der dem Pfad entspricht
2.1 Übergabebedingungen von URLMAP RequestMapingInfo finden
2.2 Wenn die Übereinstimmungsbedingung im äquivalenten Wert gefunden wird, fügen Sie sie in die Match -Bedingung hinzu
2.3 Wenn keine Übereinstimmungsbedingung gefunden wird, verwenden Sie RequestMappingInfo aller Handleermethods zu entsprechen
2.4 Sortieren Sie die Übereinstimmungen, nehmen Sie die höchste Prioritätsübereinstimmung und prüfen Sie, ob dies die einzig höchste Priorität ist
2.5: In die beiden Situationen, in denen die Bedingungen übereinstimmen und die Bedingungen nicht übereinstimmen, verkapulieren.
3.. Capsulate HandleMethod, um sicherzustellen, dass die Instanz der Bean im ContentNegotiationManager gespeichert ist, das einen Vergleich der Übereinstimmungsbedingungen für Minitype bietet, damit das Framework mit der am besten geeigneten Verarbeitungsmethode übereinstimmt.
2,5 httpMessageConverter
2.5.1 Die Standard -Nachrichtenkonverters
SpringMVC lädt die folgenden httpMessageConverters standardmäßig:
BytearrayhttpMessageConverter Convertings byte arraysStringhttpMessageConverter Converts StringsResourcehttpMessageConverter Convertings org.springframework javax.xml.transform.sourceformhttpMessageConverter konvertiert Formdaten in/aus einem MultivalUemap <String> .jaxb2RootelementHttpMessArverter konvertiert Java -Objekte nach/from XML (nur hinzugefügt, wenn Jaxb2 auf dem Class -Pathematik -Mapting -Mapting -Mapting -CONGGEDJACKNTEL2HTTTPMESSAGE -Convertjackon2Htttpmess -Converter -Convertjackon2Htttpmess -Converter -Convert -Mapting -Converter -Converting -Converting -Converting -Converting. (Nur hinzugefügt, wenn Jackson 2 auf dem Klassenpfad vorhanden ist) MappingjacksonHttpMessageConverter konvertiert JSON (nur hinzugefügt, wenn Jackson auf dem Klassenpath vorhanden ist) AtomfeedhttpMessageConverter konvertiert Atom -Feeds (Adds Rome ist auf dem Classpatpatpatpatle. Klassenpfad)
Wenn wir es zurückgeben, wird es von @ResponseBody identifiziert, das Framework verwendet httpMessageConverter, um den Rückgabewert zu verarbeiten. Der Standard -XMLCoverter ist nicht besonders nützlich und hängt von der @xmlrootelement -Annotation des Entity -Objekts ab. Es ist nicht sehr bequem. Daher stellen wir die Bibliothek der Auxiliary Class ein und passen den MessageConverter so an, dass das zurückgegebene Objekt direkt in das XML -Format verarbeitet werden kann.
Gradle Import Library
Compile Group: 'org.springframework', Name: 'Spring-Oxm', Version: '4.3.9.Release' Compile Group: 'com.thoughtworks.xstream', Name: 'Xstream', Version: '1.4.10' '
Konfiguration
@Overridepublic void configuremessageConverters (Liste <httpMessageConverter <? >> konverters) {konverters.add (createxmlHttpMessAneConverter ()); Super.ConfiguremessageConverters (Konverter);} private httpMessageConverter <Object> createxMlhttpMessageConverter () {MarshallinghttpMessageConverter xmlConverter = new marshallinghttpmessageConverter (); Xstreammarshaller Xstreammarshaller = new Xstreammarshaller (); xmlConverter.setmarshaller (xstreammarshaller); xmlConverter.Setunmarshaller (Xstreammarshaller); Return XMLConverter;}2.6 Auflösung anzeigen
2.6.1 Seitenrender (Freemarker)
Wenn Sie zur Seite zurückkehren müssen, müssen Sie das Bild nach einem geeigneten ViewResolver zeichnen, und hier verwenden Sie Freemarker als Seitenmotor.
Gradle Import Library
Compile ("org.springframework.boot: Spring-Boot-Starter-Freemarker")Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.