Сцена
Наша команда сейчас сталкивается с проблемой многопользованной док-энтузировки интерфейса данных. Чтобы решить эту проблему, мы определили спецификации для стыковки интерфейса.
Передняя часть (Android, iOS, веб-фронт) и заднее время обсуждали спецификации формата данных и определили формат данных JSON:
{"code": "200", "data": {"": ""}, "Message": "Обработано успешно"} {"Code": "300", "Data": {":" "}," Message ":" нет этого пользователя "}Код представляет собой статус обработки запросов: 200 - это нормальная обработка, 300 - это обработка исключений бизнеса, а 500 - обработка системных исключений.
Данные представляют данные, возвращаемые фоном.
Подсказка фонового фона сообщения вернет причину ошибки, когда она нормальная или успешная.
Проблема здесь
Разве не было бы очень неприятным, чтобы все обернуть возвращаемое значение каждого представления JSON?
В настоящее время AOP будет запущен. Мы можем использовать идею AOP, чтобы обернуть его на слое, когда запрос возвращается в JSON, прежде чем он будет отвечен клиенту.
Шаги внедрения
Включить AOP
<!-Base-Package, если множественные, отдельные с «,»-> <контекст: компонент-сканирование Base-package = "com.we, cn.isuyang"> <context: include filter type = "annotation" Expression = "org.springframework.stereoty.service" /> <context: excude-filter type = "annotation". Express = "org.springframework.stereotype.controller" /> < /context: component-scan> <!-открыть аннотацию AOP-> <aop: AspectJ-autoproxy />
Создать раздел
/*** json возвращает касательное лицо* <p>*, используемое для обработки json возвращает результат** @author Zhuangjunxiang ([email protected])* @date 28 апреля 2017* /@component@aspect@order (2) Общедоступный класс jsonreturnase { /**. Файл конфигурации системы по умолчанию** @param PJP Tangent Point*/ @Around (value = "@annotation (org.springframework.web.bind.annotation.responsebody)") @order (1) public arpp (final roeveringjoinpoint pjp) throuse {объектный список = pjp.proecd (); if (isReturnVoid (pjp)) {httpservletresponse response = (((ServletRequestattributes) requestContextholder.getRequestattributes ()) .getResponse (); if (isneedWrap (pjp)) {response.getWriter (). write (jsonutil.tojson (успех («операция добивается успеха»))); } return List; } вернуть данные (список); } / ** * - это необходимый пакет * * @param pjp tangent point * * @return true true означает, что нет необходимости * / private boolean isneedwrap (final surveyingjoinpoint pjp) {method method = amessutil.getmethod (pjp); return! Method.isannotationpresent (void.class); } / ** * вернуть ли пустое * * @param pjp * @return true: return type void, false: return type не является void * / private boolean isreturnvoid (ходатайство pjp) {method method = amessionUtil.getmethod (pjp); Класс <?> Returntype = method.getReturnType (); вернуть "void" .equals (returntype.getName ()); } / *** Возвращение объекта после успешной конструкции* <p>* Когда сообщение пустое, не подсказывает, что он не будет пропустить, и если оно не является пустым, оно предлагается** @param Сообщение об успехах* @return json* / public static map <string, объект> успех (окончательная строка) {map <string, объект> maputil.map (); map.put ("code", statuscode.success.key ()); map.put ("Сообщение", сообщение); map.put ("data", "); return Map;} / *** Возврат объект после успешной конструкции* <p>* Когда сообщение пустое, без приглашения и без пустой подсказки** @param Сообщение сообщения о успехе* @return json объект* / public static map <string> data (final объект) {map <string> maputil.map (); map.put ("Сообщение", Message);
Проанализируйте это
@Component Это аннотация означает передачу этого объекта в пружинный контейнер для экземпляров.
@Aspect означает, что это класс аспектов
@Around(value = "@annotation(org.springframework.web.bind.annotation.ResponseBody)")
Это означает, что все методы с аннотацией @Responsebody являются средней точкой этого раздела, другими словами, они будут перехвачены.
Уведомление:
Параметр SurveyingJoinpoint в методе WARP может использовать только подкласс JoinPoint Subclass Joyingjoinpoint, только путем окружающих уведомлений.
Каждый тип точки подключения может вызвать метод прокси и получить и изменить возвращаемое значение. В противном случае он должен использовать JoinPoint.
Случай 1: Предположим, что функция в классе контроллера не требует никакого возвращаемого значения
Например: когда я обновляю объект объекта, мне просто нужно вернуть результат обновления, и все в порядке, и нет необходимости заполнять данные.
Возвращенный формат данных:
{«Код»: «200», «Data»: «", "Сообщение": "Обработано успешно"}Идеи реализации:
Получить тип возвращаемого значения этой функции в функции обработки класса обработки аспектов. Если он void, он возвращает данные в указанном формате.
Вышеуказанное ISreturnVoid () является таким суждением.
Вам просто нужно изменить возвращаемое значение функции на void:
@Requestmapping@responsebodypublic void add (long matchid, model model) {slxsignupviewservice.setaddinfo (matchid, model);}Случай 2: Предположим, что возвращаемое значение функции в классе контроллера не нужно обернуть
например:
Указано возвращаемое значение некоторых фронтовых плагинов и сторонней стыковки (оплата).
И скачать файлы, мы избытовы.
Идеи реализации:
Настройте аннотацию для @Void:
/*** Пустая аннотация* <p>* используется для определения возвращаемого значения в слое контроллера, как это** @author wangsen ([email protected])* @date 17 августа 2017*/@target ({elementType.method})@restentumentPolicy.runtime.@documentedpubl @Interfice.
Добавить эту аннотацию в метод уровня контроллера
/*** Платеж завершен*/@void@responsebody@requestmappypublic void payfinish () бросает ioexception {alipayviewservice.payfinish ();}Определите, содержит ли эта функция эту аннотацию в этом классе обработки раздела.
Тогда он не будет обработан и возвращается как есть.
Метод isneedWrap () в классе Jsonreturnaspect обрабатывает это требование.
Суммировать
Выше приведено анализ идеи реализации JSON View, представленные вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!