SpringMVC обладает очень дружественной поддержкой расширения для экспорта и параметров параметров, что облегчает вам более высокие права на выполнение для ввода и вывода данных. Как мы можем выполнить серию обработки с помощью результатов, определенных SpringMVC?
Введите женьшень
Запрос BodyAdvice: обработка для всех параметров с @Requestbody
Справочный случай: jsonViewRequestbodyAdvice
Public Class JsonViewRequestBodyAdvice Extends RequestDobyAdviceadApter { /*** Вот операция перед захватом и сопоставлением. На самом деле, он говорит вам, что только те, которые удовлетворяют True, выполнят следующее метод. Здесь вы можете определить свой собственный связанный с бизнесом перехват и сопоставление * @param methodparameter * @param targettype * @param convertertype * @return */ @override public boolean-поддержку (метод параметров Methodparameter, typredtype, class <? Extends httpmessageconverter <? >> Converterpe) (AbstractJackson2httpmessageConverter.class.isassignablefrom (convertertype) && methodParameter.getParameterannatation (jsonView.class)! = Null); } // Вот конкретное предварительное операцию ... Следующий пример-выяснить, имеет ли этот метод ввода параметра @JsonView модификация @Override public httpinputmessage перед BodyTude (httpinputmessage inputmessage, методпараметр MethodParameter, Type TargetType, Class <? ExtpectexageGececonverter <? Jsonview annotation = methodparameter.getParameterannotation (jsonView.class); Class <?> [] Class = annotation.value (); if (classe.length! = 1) {бросить новый allogalargumentException ("@jsonview только для запроса совета тела с точным 1 аргумент класса:" + methodparameter); } вернуть новый картирование JacksonInputMessage (inputmessage.getbody (), inputmessage.getheaders (), classe [0]); }}Экспорт женьшень
Ответ CodyAdvice: обработка для всех параметров с @Responsebody
Справочный случай:
@ControllerAdvicePublic Class LogresponseBodyAdvice реализует responsebodyAdvice { / ** * * @param returntype * @param convertertype * @return * / @override public boolean -поддержку (Methodparameter returntype, class convertertype) {return true; } @Override public object перед BodyWrite (корпус объекта, методпарамет returntype, mediaType selectedContentType, класс SelectedConverterType, Serverhttprequest -запрос, Serverhttpresponse response) {// Делать что -либо тело является возвращаемым объектом результата, возвращаемое тело перед обработкой; }}Что следует отметить
Пользовательский класс объектов обработки должен быть добавлен с аннотацией @controllerAdvice!
Почему?
В initControllerAdviceCache() коде класс RequestMappingHandlerAdapter выполнит
List <COLNORLERADVICEBEAN> BEANS = CONTROLLERADVICEBEAN.FINDANNOTATEDBEANS (GETAPPLICATECONTEXT ()); AnnotationAwareRordComparator.sort (Beans);
Метод ControllerAdvicebean.FindannotatedBeans будет искать классы с аннотациями ControllerAdvice в классе и будет добавлен в обработку.
Общедоступный статический список для (String name: beanfactoryUtilils.beannamesfortypeincludedancestors (ApplicationContext, object.class)) {if (ApplicationContext.FindannotationOnbean (имя, controlleradvice.class)! = null) {beans.add (new ControllerAdvicebean (имя, ApplicationContext)); }} вернуть бобы; }Таким образом, вы можете определить входящие и исходящие параметры результата в соответствии с вашими потребностями и сделать особую лечение ...
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.