1. Введение
В этой статье в основном представлено, как использовать сервис SpringMVC Backend для поддержки нескольких типов возвращаемых значений (XML, JSON, HTML, Excel) посредством конфигурации.
Код здесь использует Springboot, адрес загрузки: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. Основные понятия
2.1 Разница между настройками типа контента и принятия в httphader
Принять: формат данных, который будет возвращен клиенту с помощью интерфейса
curl -header 'Accept: application/json' http: // localhost: 8080/todo
Тип контента: формат данных, отправленный клиентом на сервер
curl -x put -header 'content -type: application/json' -d '{"title": "Расписание выходных", "Контент": "Sleep"}' http: // localhost: 8080/todo2.2 Два способа генерирования вывода в SpringMVC
1) Когда сервер использует метод RESTFUL, чтобы предоставить данные только для AJAX или других серверов клиента, @Responsebody обычно используется для идентификации вашего возврата. В настоящее время Spring использует httpmessageconverter для форматирования возвращаемого объекта в требуемый формат.
2) Когда вам необходимо предоставить презентационный уровень (например, HTML), SpringMVC использует ViewResolver для обработки вашего возврата.
Иногда ваше приложение должно предоставить оба
2.3 Определение выходного формата SpringMVC
Много раз, чтобы поддержать несколько систем или нескольких терминалов, вам необходимо вывести одни и те же данные в разных проявлениях.
SpringMVC использует ContentNegotationStrategy, чтобы определить, какой формат данных требует пользователя.
ContentNegotationStrategy использует три способа определить, какие данные пользователь хочет вернуть
См. Конфигурацию ниже
@OverridePublic void configureContentNegotiation (contentNegotiationConfigurer configure) {configururer.favorPathextension (false) .favorParameter (true) .parameternam .mediatype ("html", mediaType.text_html) .mediatype ("json", mediaType.application_json);}Добавьте вышеупомянутую конфигурацию в WebMVCConfig вашего проекта, что означает закрытие правила суффикса URL -адреса, открывая правило параметра запроса и настройку параметра запроса для «Mediatype». Формат возврата по умолчанию - JSON, и он также поддерживает возврат XML и HTML.
Эти три компонента являются ключом к возвращению выходов в разных форматах
2.4 requestMappings
2.4.1
То, что мы обычно используем в пружине, - это запрос на мандлермоп. Согласно запросу, мы уточняем условия соответствия. Общий процесс поиска следующим образом:
AbstracThandLermethoDmapping Interface Interface Gethandlerinternal
1. Используйте urlpathhelper, чтобы найти путь, соответствующий запросу
2. Найдите ручной работы, соответствующий пути
2.1 Найти условия сопоставления из urlmap requestMappingInfo
2.2 Если условие соответствия найдено в эквивалентном значении, добавьте его в условие соответствия
2.3 Если условие сопоставления не найдено, используйте requestMappingInfo всех ручных рук, чтобы соответствовать
2.4 Сортируйте спички, выберите матч с наивысшим приоритетом и проверьте, является ли это единственным самым приоритетом
2.5: Инкапсулируйте две ситуации, когда условия соответствуют и условия не соответствуют.
3. Инкапсулируйте ручной работы, чтобы гарантировать, что экземпляр боба хранится в ContentNegotiationManager, который обеспечивает сравнение условий соответствия для MinityPe, чтобы структура могла соответствовать наиболее подходящему методу обработки.
2.5 httpmessageconverter
2.5.1 Конвертеры сообщений по умолчанию
Springmvc загрузит следующие httpmessageconverters по умолчанию:
BytearrayhttpmessageConverter преобразует Byte ArraysstringhttpmessageConverter javax.xml.transform.sourceformhttpmessageConverter преобразует данные формы в/из MultivalueMap <String, String> .jaxB2RootelementHttpmessageConverter преобразует объекты Java в/из XML (добавлен только в JAXB2 (только в классе). Jackson 2 присутствует в классе) MappingJacksonhttpmessageConverter Converts JSON (добавлен только в том случае, если Джексон присутствует в классе) AtomfeedhttpmessageConverter, преобразующий корм для атомов (добавленная только в том случае, если Rome присутствует на классной точке) rssChannelhttpmessageconverter converts rebss (добавляется только на If -Contres (Prome).
Если мы вернемся, это идентифицируется @ResponseBody, Framework будет использовать httpmessageConverter для обработки возвращаемого значения. XMLCoverter по умолчанию не особенно полезен и зависит от аннотации @xmlrootelement на объекте объекта. Это не очень удобно. Поэтому мы вводим библиотеку вспомогательного класса и настраиваем MessageConverter, чтобы возвращаемый объект мог быть обработан непосредственно в формат XML.
Библиотека импорта Градл
Группа компиляции: 'org.springframework', имя: 'Spring-Oxm', версия: '4.3.9.Release'compile Group:' com.thoutworks.xstream ', имя:' xstream ', версия:' 1.4.10 '
Конфигурация
@OverridePublic void configureMessageConverters (list <httpmessageConverter <? >> преобразователи) {преобразователи.add (createxmlhttpmessageConverter ()); super.configuremessageconverters (преобразователи);} частные httpmessageconverter <object> createxmlhttpmessageconverter () {marshallinghttpmessageconverter xmlconverter = new MarshallinghttpmessageNverter (); Xstreammarshaller xstreammarshaller = new xstreammarshaller (); xmlconverter.setmarshaller (xstreammarshaller); xmlconverter.setunmarshaller (xstreammarshaller); return xmlconverter;}2.6 Просмотр разрешения
2.6.1 render (freemarker)
Когда вам нужно вернуться на страницу, вам нужно нарисовать изображение подходящим ViewResolver, и здесь вы используете Freemarker в качестве двигателя Page.
Библиотека импорта Градл
Compile ("org.springframework.boot: Spring-Boot-Starter-Freemarker")Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.