Szene
Unser Team steht jetzt vor dem Problem des Multi-Terminal-Datenschnittstellens an. Um dieses Problem zu lösen, haben wir die Spezifikationen für das Schnittstellendocking definiert.
Das Front-End (Android, iOS, das Web-Front-End) und das Back-End diskutierten die Datenformatspezifikationen und bestimmte das Datenformat von JSON:
{"Code": "200", "Daten": {"": ""}, "Nachricht": "erfolgreich verarbeitet"} {"Code": "300", "Daten": {"": ""}, "Nachricht": "Nein dieser Benutzer"}Der Code repräsentiert den Anforderungsverarbeitungsstatus: 200 ist eine normale Verarbeitung, 300 ist die Geschäftsausnahmeverarbeitung und 500 ist die Systemausnahmeverarbeitung.
Die Daten stellen die vom Hintergrund zurückgegebenen Daten dar.
Die Eingabeaufforderung zur Nachrichtenhintergrund gibt den Fehlergrund zurück, wenn er normal oder erfolgreich ist.
Das Problem ist hier
Wäre es nicht sehr mühsam, dass alle den Rückgabewert jeder JSON -Ansicht einwickeln?
Zu diesem Zeitpunkt wird AOP gestartet. Wir können die Idee von AOP verwenden, um sie auf eine Ebene zu wickeln, wenn die Anfrage an JSON zurückkehrt, bevor sie auf den Kunden beantwortet wurde.
Implementierungsschritte
AOP aktivieren
<!-Basis-Package, wenn mehrere, getrennt mit ","-> <Context: Komponent-Scan-Basis-Package = "com.We, cn.isuyang"> <context: include-filter type = "Annotation" Expression = "org.springFramework.stereotype.Service" /> <context "context" context: schließen-filter type = "Annotation" Annotation "Annotation" Annotation "Annotation" Annotation "Annotation". Expression = "org.springframework.stereotype.Controller" /> < /context: component-scan> <!-OP AOP-Annotation-> <AOP: Aspektj-Autoproxy /> Öffnen
Erstellen Sie einen Abschnitt
/*** JSON gibt das Tangentengesicht zurück* <p>*, mit dem JSON das Ergebnis zurückgibt Die Konfigurationsdatei des Systems standardmäßig** @param PJP Tangent Point*/ @around (value = "@Annotation (org.springFramework.web.bind.annotation.ResponseBody)") @Order (1) Public Object Warp (endgültige Verarbeitung von PJP) Throws Throwable {Objektliste = PJP.Proceed (). if (isReturnvoid (pjp)) {httpServletResponse response = ((servletRequestAttributes) RequestContextHolder.getRequestAtributes ()) .getResponse (); if (isNeedWrap (pjp)) {response.getWriter (). Write (jsonUtil.tojson (Erfolg ("Operation erfolgreich")); } Rückgabeliste; } returndaten (Liste); } / ** * ist das erforderliche Paket. return! methode.isannotationPresent (void.class); } / ** *, ob leer zurückgegeben werden soll * * @param pjp * @return true: Der Rückgabetyp ist ungültig, false: Der Rückgabetyp ist nicht void * / privat boolean isReturnvoid (ProveringJoInpoint PJP) {method method = aspektil.getMethod (PJP); Class <?> ReturnType = methode.getReturnType (); return "void" .equals (returntype.getName ()); } / *** Objekt nach erfolgreicher Konstruktion zurückgeben* <p>* Wenn die Nachricht leer ist, wird keine Eingabeaufforderung aufgefordert, und wenn sie nicht leer ist, wird sie aufgefordert.** @Param Nachrichten Erfolgsnachricht* @return json -Objekt* / public static map <String, Objekt> Erfolg (endgültige String -Nachricht) {map <string, Objekt> map = maputil.map (); map.put ("code", statuscode.success.key ()); map.put ("meldung", meldung); map.put ("data", "); return map;} / *** Return Object nach erfolgreicher Konstruktion* <p>* Wenn die Nachricht leer ist, keine Eingabeaufforderung und keine leere Eingabeaufforderung** @param Nachrichten Erfolgsnachricht* @Return JSON -Objekt* / public static map <String, Objekt> Daten (endgültige Objektdaten) {map <string, Objekt> maputil.map.map (); map.put (); map.); map.put ("meldung", meldung);Analysieren
@Component Diese Annotation bedeutet, dieses Objekt zur Instanziierung an den Federbehälter zu übergeben.
@Aspect bedeutet, dass dies eine Facettenklasse ist
@Around(value = "@annotation(org.springframework.web.bind.annotation.ResponseBody)")
Dies bedeutet, dass alle Methoden mit @ResponseBody Annotation der Mittelpunkt dieses Abschnitts sind, mit anderen Worten, sie werden abgefangen.
Beachten:
Der Parameter "ProcessjoInpoint in der Warp -Methode" kann nur die Joinpoint -Unterklasse profitingjoinpoint verwenden, nur durch umgebende Benachrichtigungen.
Jeder Verbindungspunkttyp kann die Proxy -Methode aufrufen und den Rückgabewert erhalten und ändern. Ansonsten soll Joinpoint verwendet werden.
Fall 1: Angenommen, die Funktion in der Controller -Klasse benötigt keinen Rückgabewert
Zum Beispiel: Wenn ich ein Entitätsobjekt aktualisiere, muss ich nur das Update -Ergebnis zurückgeben und es ist in Ordnung, und es müssen keine Daten ausgefüllt werden.
Rückgegebenes Datenformat:
{"Code": "200", "Daten": "", "Nachricht": "erfolgreich verarbeitet"}Implementierungsideen:
Nutzen Sie den Rückgabewerttyp dieser Funktion in der Verarbeitungsfunktion der Aspektverarbeitungsklasse. Wenn es für nichtig ist, gibt es die Daten im angegebenen Format zurück.
Das obige IsReturnvoid () ist ein solches Urteil.
Sie müssen nur den Rückgabewert der Funktion auf ungültig ändern:
@RequestMapping@responseBodypublic void add (langes MatchID, Modellmodell) {SlxSignUpViewService.setaddInfo (MatchID, Modell);}Fall 2: Angenommen, der Rückgabewert der Funktion in der Controller -Klasse muss nicht verpackt werden
Zum Beispiel:
Der Rückgabewert einiger Front-End-Plug-Ins und der Docking von Drittanbietern (Zahlung) wird angegeben.
Und download Dateien, wir sind überflüssig.
Implementierungsideen:
Annotation für @Void anpassen:
/*** leere Annotation* <p>* verwendet, um den Rückkehrwert in der Controller -Ebene so zu identifizieren, wie es ist
Fügen Sie diese Annotation der Controller Layer -Methode hinzu
/*** Zahlung abgeschlossen*/@void@responsebody@requestmapPingPublic void payfinish () löst IOException {alipayViewService.payfinish ();} aus;}Bestimmen Sie, ob diese Funktion diese Annotation in diesem Abschnittsverarbeitungsklasse enthält.
Dann wird es nicht verarbeitet und zurückkehren, wie es ist.
Die IsNeedWrap () -Methode in der JSONRETURNaScespect -Klasse übernimmt diese Anforderung.
Zusammenfassen
Die obige ist eine Analyse der JSON View -Implementierungsideen von benutzerdefinierten Spring -MVC, die Ihnen vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!