Scène
Notre équipe est désormais confrontée au problème de l'amarrage d'interface de données multi-terminaux. Afin de résoudre ce problème, nous avons défini les spécifications de l'amarrage de l'interface.
Le front-end (Android, iOS, Web frontal) et le back-end ont discuté des spécifications du format de données et déterminé le format de données de JSON:
{"code": "200", "data": {"": ""}, "message": "traité avec succès"} {"code": "300", "data": {"": ""}, "message": "Non cet utilisateur"}Le code représente l'état de traitement de la demande: 200 est un traitement normal, 300 est un traitement d'exception de l'entreprise et 500 est le traitement d'exception du système.
Les données représentent les données renvoyées par l'arrière-plan.
L'invite d'arrière-plan du message renvoie la raison d'erreur lorsqu'elle est normale ou réussie.
Le problème est là
Ne serait-il pas très difficile de laisser tout le monde envelopper la valeur de retour de chaque vue JSON?
À l'heure actuelle, AOP sera lancé. Nous pouvons utiliser l'idée de AOP pour l'envelopper sur une couche lorsque la demande revient à JSON avant de répondre au client.
Étapes de mise en œuvre
Activer AOP
<! - Base-Package Si multiple, séparé avec "," -> <Context: Component-Scan Base-Package = "Com.we, CN.isuyang"> <context: include-filter type = "annotation" expression = "org.springframework.sterreoType.service" /> <context: exclure-filter type = "annotation" expression = "org.springframework.sterreotype.controller" /> </ context: Component-Scan> <! - Ouvrez AOP Annotation -> <aop: AspectJ-Autoproxy />
Créer une section
/ ** * JSON Renvoie le visage tangent * <p> * Utilisé pour traiter JSON renvoie le résultat * * @author zhuangjunxiang ([email protected]) * @Date 28 avril 2017 * / @ component @ aspect @ commander (2) Classe publique JSONRURNURNATASPET {/ ** Pila la valeur par défaut * Le fichier de configuration du système par défaut * * @param pjp tangent point * / @around (value = "@annotation (org.springframework.web.bind.annotation.responsebody)") @Order (1) Public Object Warp (Final ProcedingJoinpoint PJP) lance lance-trace {objet List = Pjp.Proceed (); if (isReturnVoid (pjp)) {httpServletResponse Response = ((servLetRequestAttributes) requestContexTholder.getRequestAttributes ()) .getResponse (); if (isNeedWrap (pjp)) {réponse.getWriter (). write (jsonutil.tojson (Success ("Operation Succeeds"))); } Retour List; } return data (list); } / ** * est le package requis * * @param pjp tangent point * * @return true signifie qu'il n'y a pas besoin * / booléen privé isneedwrap (procédure finale PJP) {méthode méthode = aspectTutil.getMethod (pjp); return! Method.isannotationPresent (void.class); } / ** * Il faut retourner vide * * @param pjp * @return true: le type de retour est vide, false: le type de retour n'est pas vide * / private booléen isReturnvoid (procédingjoinpoint pjp) {méthode méthode = aspecttutil.getMethod (pjp); Classe <?> ReturnType = méthode.getReturnType (); return "void" .equals (returnType.getName ()); } / ** * RETOUR OBJET Après une construction réussie * <p> * Lorsque le message est vide, aucune invite n'est invitée, et si elle n'est pas vide, elle est invitée * * @param Message Success Message * @return JSON Object * / public static map <String, Object> Success (Final String Message) {map <string, objet> map = maputil.map (); map.put ("code", statuscode.success.key ()); map.put ("message", message); map.put ("data", "); retour map;} / ** * return objet après la construction réussie * <p> * Lorsque le message est vide, pas d'invite, et pas d'invite vide * * @param message de réussite du message * @return json objet * / public static map <string> objet> (final object data) {map <string, object> map = mapUtil.map (); map.put (" code ", statuscode.succeswe. map.put ("message", message);
Analyser
@Component Cette annotation signifie remettre cet objet au conteneur de ressort pour instanciation.
@Aspect signifie que c'est une classe de facettes
@Around(value = "@annotation(org.springframework.web.bind.annotation.ResponseBody)")
Cela signifie que toutes les méthodes avec l'annotation @Responsebody sont le point médian de cette section, en d'autres termes, elles seront interceptées.
Avis:
Le paramètre ProcedingJoinpoint dans la méthode WARP ne peut utiliser que la sous-classe de jointure ProcedingJoinpoint, uniquement par des notifications environnantes.
Chaque type de point de connexion peut appeler la méthode proxy et obtenir et modifier la valeur de retour. Sinon, il s'agit d'utiliser JoinPoint.
Cas 1: Supposons que la fonction de la classe de contrôleur n'a besoin d'aucune valeur de retour
Par exemple: lorsque je met à jour un objet entité, j'ai juste besoin de renvoyer le résultat de la mise à jour et c'est OK, et il n'est pas nécessaire de remplir les données.
Format de données retourné:
{"code": "200", "data": "", "message": "traité avec succès"}Idées de mise en œuvre:
Obtenez le type de valeur de retour de cette fonction dans la fonction de traitement de la classe de traitement d'aspect. S'il est vide, il renvoie les données au format spécifié.
Le ci-dessus Isreturnvoid () est un jugement comme celui-ci.
Il vous suffit de modifier la valeur de retour de la fonction en void:
@ Requestmapping @ réponsebodypublic void add (long matchId, modèle modèle) {slxsignupViewService.setAddinfo (matchId, modèle);}Cas 2: Supposons que la valeur de retour de la fonction dans la classe de contrôleur n'a pas besoin d'être enveloppée
Par exemple:
La valeur de retour de certains plug-ins frontaux et de l'amarrage tiers (paiement) est spécifié.
Et téléchargez des fichiers, nous sommes redondants.
Idées de mise en œuvre:
Personnalisez l'annotation pour @Void:
/ ** * Annotation vide * <p> * Utilisé pour identifier la valeur de retour dans la couche de contrôleur comme c'est * * @Author Wangsen ([email protected]) * @Date 17 août 2017 * / @ Target ({elementType.Method}) @ retention(RetentionPolicy.runtime)@DocumedPuBlic @Interface {}
Ajoutez cette annotation à la méthode de la couche de contrôleur
/ ** * Paiement terminé * / @ void @ réponse @ requestMappingPublic void payfinish () lève ioException {AlipayViewService.PayFinish ();}Déterminez si cette fonction contient cette annotation sur cette classe de traitement de section.
Ensuite, il ne sera pas traité et ne reviendra pas tel quel.
La méthode ISNEEDWRAP () dans la classe JSONReturnAnSpect gère cette exigence.
Résumer
Ce qui précède est une analyse des idées de mise en œuvre de la vue JSON de Custom Spring MVC qui vous est présentée. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!