SpringMVC a un support d'expansion très convivial pour les exportations de paramètres et les paramètres, ce qui vous facilite d'avoir des droits d'exécution plus importants pour l'entrée et la sortie des données. Comment pouvons-nous effectuer une série de traitement à travers les résultats définis par SpringMVC?
Entrez dans le ginseng
RequestBodyAdvice: Traitement pour tous les paramètres avec @Requestbody
Cas de référence: JSONViewRequestbodyAdvice
La classe publique JSONViewRequestBodyAdvice étend RequestBodyAdviceAdapter {/ ** * Voici une opération de pré-interception et de correspondance. En fait, il vous indique que seuls ceux qui satisfont True exécuteront la méthode avant BodyRead suivante. Ici, vous pouvez définir votre propre interception et correspondance lié à l'entreprise * @param méthodyParameter * @param TargetType * @param ConverterType * @return * / @Override public Boolean Supports (méthodyParameter MethodParameter (AbstractJackson2HttpMessageConverter.class.isAssignableFrom (ConverterType) && methodParameter.getParameterannotation (jsonView.class)! = Null); } // Voici la préopération spécifique ... L'exemple suivant est de savoir si cette méthode d'entrée de paramètre a @jsonView Modification @Override public httpinputMessage avantbodyread (HttpinputMessage inputMessage, méthodyParameterParameter, type TargetType, classe <? Extend HttpMessageConverter <? >> JSONVIEW ANNOTATION = MethodParameter.GetParameterannotation (JSONView.class); Classe <?> [] Classes = Annotation.Value (); if (Classes.Length! = 1) {Throw New illégalArgumentException ("@jsonView uniquement pris en charge pour les conseils corporels de demande avec exactement 1 argument de classe:" + méthodeParameter); } return new MappingJackSonInputMessage (inputMessage.getBody (), inputMessage.GetHeaders (), classes [0]); }}Exporter le ginseng
ResponseBodyAdvice: Traitement pour tous les paramètres avec @ResponseBody
Cas de référence:
@ControlleRAdvicePublic classe LOGRESPONSEBALBEBODADVICE implémente ResponseBodyAdvice {/ ** * * @param returnType * @param converterType * @return * / @Override public boolean supports (methodParameter returnType, class converterType) {return true; } @Override Public Object avantbodywrite (corps d'objet, méthodeParameter returnType, mediaType selectedContentType, class selectedConverterType, serverhttprequest request, serverhttpResponse réponse) {// tout le corps est l'objet de résultat renvoyé, le corps de retour avant le traitement; }}Choses à noter
La classe d'objets de traitement personnalisée doit être ajoutée avec @ControllerAdvice Annotation!
Pourquoi?
Dans le code initControllerAdviceCache() , la classe RequestMappingHandlerAdapter exécutera un
List <ControllerAdviceBean> Beans = ControllerAdviceBean.FindannotedBeans (GetApplicationContext ()); AnnotationAwareOrderComparator.Sort (Beans);
La méthode ControllerAdviceBean.FindannotedBeans recherchera des classes avec des annotations ControllerAdvice sur la classe et sera ajoutée au traitement.
Liste statique publique <ControllerAdviceBean> FindAnnoTatedBeans (applicationContext ApplicationContext) {list <ControllerAdviceBean> beans = new ArrayList <ControllerAdviceBean> (); for (String Name: beanfactoryutils.beanNamesFortyTyMedEdanceStors (applicationContext, object.class)) {if (applicationContext.FindannotationonBean (name, ControllerAdvice.class)! = null) {beans.addd (new ControllerAdviceBean (nom, applicationContex); }} return Beans; }Vous pouvez donc définir les résultats entrants et sortants du résultat en fonction de vos besoins et faire un traitement spécial ...
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.