1. مقدمة
تقدم هذه المقالة بشكل رئيسي كيفية استخدام خدمات SPRINGMVC الخلفية لدعم أنواع قيمة الإرجاع المتعددة (XML ، JSON ، HTML ، Excel) من خلال التكوين.
يستخدم الرمز هنا Springboot ، عنوان التنزيل: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. المفاهيم الأساسية
2.1 الفرق بين نوع المحتوى وقبول الإعدادات في httpheader
قبول: تنسيق البيانات المراد إرجاعه إلى العميل بواسطة الواجهة
Curl -Header 'Accept: Application/JSON' http: // localhost: 8080/todo
نوع المحتوى: تنسيق البيانات الذي أرسله العميل إلى الخادم
Curl -x put -Header 'Content -Type: application/json' -d '{"title": "Weekend Commine" ، "Content": "Sleep"2.2 طريقتان لتوليد الإخراج في springMVC
1) عندما يستخدم الخادم طريقة RESTful لتوفير بيانات فقط لطلبات AJAX أو خادم العميل الأخرى ، عادة ما يتم استخدام ResponseBody لتحديد عودتك. في هذا الوقت ، يستخدم Spring httpmessageconverter لتنسيق الكائن الذي تم إرجاعه في التنسيق المطلوب.
2) عندما تحتاج إلى توفير طبقة عرض تقديمي (مثل HTML) ، يستخدم SpringMVC ViewResolver لمعالجة عودتك.
في بعض الأحيان يجب أن يوفر تطبيقك كلاهما
2.3 تحديد تنسيق إخراج springMVC
في كثير من الأحيان ، من أجل دعم أنظمة متعددة أو محطات متعددة ، تحتاج إلى إخراج نفس البيانات في مظاهر مختلفة.
يستخدم SpringMVC contentNegotationStrategy لتحديد تنسيق البيانات التي يطلبها المستخدم للحصول عليها.
يستخدم ContentNegotationStrategy ثلاث طرق لتحديد نوع البيانات التي يريد المستخدم إرجاعها
يرجى الاطلاع على التكوين أدناه
Overridepublic void configureContentNegotiation (contentNegotiationConfigurer configure) {configurer.favorpathextense (false) .favorameter (true) .ParameterName ( . MediAtype ("html" ، mediaType.text_html). mediatepe ("json" ، mediaType.application_json) ؛}أضف التكوين أعلاه إلى WebMVCConfig لمشروعك ، مما يعني إغلاق قاعدة لاحقة عنوان URL ، وفتح قاعدة معلمة الطلب وتعيين معلمة الطلب على "MediaType". تنسيق الإرجاع الافتراضي هو JSON ، ويدعم أيضًا إرجاع XML و HTML.
هذه المكونات الثلاثة هي مفتاح إرجاع المخرجات بتنسيقات مختلفة
2.4 requestMappings
2.4.1 requestMappingHandLermapping
ما نستخدمه عادة في الربيع هو requestMappingHandLermapping. وفقًا لـ requestMappingInfo ، نقوم بتحسين شروط المطابقة. عملية البحث الشاملة هي كما يلي:
Abstracthandlermethodmapping واجهة التنفيذ 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 تحويل STRINGSRESERCEHTTTPMESSAGECONFERTER javax.xml.transform.sourceformhtpmessageConverter يحول بيانات النموذج إلى/من multivaluemap <string>. جاكسون 2 موجود على classpath) mappingjacksonhttpmessageConverter يحول JSON فقط (تمت إضافته فقط إذا كان جاكسون موجودًا على classpath) atomfeedhttpmessageConverter يحول ذرة Atom (إضافة فقط إلى أن Rome)
إذا قمنا بإعادته ، فسيتم تحديده بواسطة @ResponseBody ، فسيستخدم الإطار httpmessageConverter لمعالجة قيمة الإرجاع. XMLCoverter الافتراضي ليس مفيدًا بشكل خاص ويعتمد على شرح @xmlrootelement على كائن الكيان. انها ليست مريحة للغاية. لذلك ، نقدم مكتبة الفئة المساعدة وتخصيص MessageConverter بحيث يمكن معالجة الكائن الذي تم إرجاعه مباشرة في تنسيق XML.
مكتبة استيراد Gradle
مجموعة الترجمة: 'org.springframework' ، الاسم: 'Spring-oxm' ، الإصدار: '4.3.9.Release'Compile Group:' com.reatoughworks.xstream '، الاسم:' xstream '، الإصدار:' 1.4.10 '
إعدادات
Overridepublic void configuremessageConverters (قائمة <httpmessageconverter <؟ >> المحولات) {converters.add (createxmlhttpmessageConverter ()) ؛ super.configuremessageConverters (المحولات) ؛} private httpmessageConverter <Object> createxmlhtpmessageConverter () {MarshallingHttpMessageConverter xmlConverter = New MarshallingHttpmessageConverter () ؛ XstreamMarshaller XstreamMarshaller = جديد XstreamMarshaller () ؛ xmlConverter.SetMarshaller (xstreammarshaller) ؛ xmlConverter.setunmarshaller (xstreammarshaller) ؛ إرجاع xmlConverter ؛}2.6 عرض القرار
2.6.1 صفحة عرض (Freemarker)
عندما تحتاج إلى العودة إلى الصفحة ، تحتاج إلى رسم الصورة من خلال ViewResolver مناسبة ، وهنا تستخدم علامة Freemarker كمحرك الصفحة.
مكتبة استيراد Gradle
compile ("org.springframework.boot: Spring-Boot-Starter-Freemarker")لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.