1. وصف المشكلة:
في برنامج الويب الخاص بـ SprinVMVC ، أرسل طلب منشور Ajax على الصفحة ، ثم استخدم REquestBody لتلقي المعلمات في هيئة الطلب على الخادم. أثناء التشغيل ، أردت أن يرسل الخادم طلب AJAX. حافظ المتصفح على ردود الفعل 415 نوع الوسائط غير المدعوم أو 400 رمز الحالة ، معتقدين أن هناك خطأ في كتابة أياكس. بعد البحث عن المعلومات لفترة طويلة ، وجدت أن هناك شيئًا مفقودًا في تكوين ملف Spring-MVC.Config. بالطبع ، من الممكن أيضًا أن تفتقد حقًا إعدادات المعلمة من نوع المحتوى في AJAX. بعد التحليل ، يجب أن أواجه مشكلة في تكوين ملف springmvc-config.xml.
(ملاحظة): 400: (طلب الخطأ) لا يفهم الخادم بناء جملة الطلب. 415: (نوع الوسائط غير المدعوم) لا يتم دعم التنسيق المطلوب بواسطة الصفحة المطلوبة.
2. الحل:
في ملف springmvc-config.xml ، تتم إضافة stringhttpmessageconverter request kension ، وشظية التكوين هي كما يلي:
<! --- stringhttpmessageConverter Bean-> <bean id = "stringhttpmessageconverter" class = "org.springframework.http.converter.stringhttpmessageconverter"/>! = "org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter"> <property name = "messageConverters"> <list> <ref bean = "mappingjacksonhttpmessageconverter" /> <! bean = "jsonhttpmessageConverter"/> <ref bean = "formhttpmessageconverter"/> </list> </propert
3. مقدمة إلى HTTPMESSAGECONVERTER محول معلومات طلب:
تحدد واجهة HTTPMESSAGECONVERTER محولًا يمكنه تحويل معلومات طلب HTTP ومعلومات استجابة HTTP بالتنسيق. عادة ما تكون هناك المحولات التالية التي تنفذ واجهة HTTPMESSAGECONVERTER:
ByteArrayHttpMessageConverter: مسؤول عن قراءة بيانات التنسيق الثنائي وكتابة بيانات التنسيق الثنائي ؛
StringHttpMessageConverter: مسؤول عن قراءة بيانات تنسيق السلسلة وكتابة بيانات التنسيق الثنائي ؛
ResourceHttpMessageConverter: مسؤول عن قراءة ملفات الموارد وكتابة بيانات ملف الموارد ؛
formhttpmessageConverter: المسؤول عن قراءة البيانات المقدمة حسب النموذج (تنسيق البيانات الذي يمكن قراءته هو التطبيق/x-ww-form-urlencoded ، ولا يمكن قراءة بيانات تنسيق multipart/form-data) ؛ مسؤول عن كتابة البيانات في تطبيقات التطبيق/X-WWW-from-urlencoded و multipart/form-data ؛
MapPingJacksonHttpMessageConverter: مسؤول عن قراءة وكتابة البيانات بتنسيق JSON ؛
SourceHttpMessageConverter: مسؤول عن قراءة وكتابة البيانات المحددة بواسطة javax.xml.transform.source في XML ؛
jaxb2rootelementhttpmessageConverter: مسؤول عن قراءة وكتابة البيانات بتنسيق علامة XML ؛
AtomfeedhttpmessageConverter: مسؤول عن قراءة وكتابة البيانات بتنسيق Atom ؛
RSSCHANNELHTTPMESSAGECONVERTER: مسؤول عن قراءة وكتابة البيانات بتنسيق RSS ؛
لمزيد من المعلومات حول httpmessageconverter ، يرجى الاطلاع على:
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/httpmessageconverter.html
4.httpmessageConverter عملية تنفيذ معلومات طلب المعلومات:
عندما يرسل المستخدم طلبًا ، سيقرأ شرح REQUESTBODY البيانات في هيئة الطلب. يؤكد محول الطلب الافتراضي httpmessageConverter تنسيق بيانات رأس الطلب عن طريق الحصول على نوع المحتوى في رأس الطلب ، وبالتالي تكييف المحول المناسب مع بيانات الطلب. على سبيل المثال ، ContentType: Applicatin/JSON ، سيتم تكييف المحول مع MapPingJacksonHttpMessageConverter. وبالمثل ، سيمكّن التعليق التوضيحي @ResponseBody httpmessageconverter من اكتشاف خاصية قبول في الرأس لتكييف محول الاستجابة.
تلخيص:
عند استخدام SPRINGMVC لاستقبال بيانات الخادم ، خاصة عند تقديم طلبات AJAX ، انتبه بشكل خاص إلى إعدادات سمة ContentType وقبول السمة ، وتكوين المحول المقابل في springmvc-config.xml. عندما نستخدم springMVC لتقديم طلبات AJAX ، تستخدم بعض الطرق طريقة Response.getWriter (). print (). هناك طريقة أخرى أفضل هي إضافة شرح @ResponseBody لإعادة بيانات نوع الخريطة مباشرة ، ويقوم المحول تلقائيًا بتحويله إلى نوع بيانات JSON.