1. คำอธิบายปัญหา:
ในโปรแกรมเว็บของ Sprinvmvc ฉันส่งคำขอโพสต์ของ Ajax บนหน้าแล้วใช้ @requestbody เพื่อรับพารามิเตอร์ในตัวถังคำขอบนเซิร์ฟเวอร์ ในระหว่างการรันฉันต้องการให้เซิร์ฟเวอร์ส่งคำขอ AJAX เบราว์เซอร์ยังคงตอบกลับประเภทสื่อที่ไม่ได้รับการสนับสนุน 415 หรือรหัสสถานะ 400 โดยคิดว่ามีบางอย่างผิดปกติกับการเขียน Ajax หลังจากค้นหาข้อมูลเป็นเวลานานฉันพบว่ามีบางอย่างที่ขาดหายไปในการกำหนดค่าของไฟล์ Spring-MVC.Config แน่นอนว่ามันเป็นไปได้ที่คุณจะพลาดการตั้งค่าพารามิเตอร์ประเภทเนื้อหาใน AJAX หลังจากการวิเคราะห์ฉันควรมีปัญหากับการกำหนดค่าของไฟล์ SpringMVC-Config.xml
(หมายเหตุ): 400: (คำขอข้อผิดพลาด) เซิร์ฟเวอร์ไม่เข้าใจไวยากรณ์ของคำขอ 415: (ประเภทสื่อที่ไม่ได้รับการสนับสนุน) รูปแบบที่ร้องขอไม่ได้รับการสนับสนุนโดยหน้าที่ร้องขอ
2. โซลูชัน:
ในไฟล์ SpringMvc-Config.xml ตัวแปลงข้อมูลการร้องขอ StringhttpMessageConverter จะถูกเพิ่มและชิ้นส่วนการกำหนดค่ามีดังนี้:
<! --- stringhttpmessageConverter Bean-> <bean id = "StringhttpmessageConverter" class = "org.springframework.http.converter.stringhttpmessageconverter"/> <! = "org.springframework.web.servlet.mvc.annotation.annotationMethodhandlerAdapter"> <property name = "MessageConverters"> <list> <ref Bean = "MapingJacksonHtpMessageconverter" /> < /> <ref bean = "jsonhttpmessageConverter" /> <ref bean = "formhttpmessageConverter" /> </list> </property> </ebean>
3. บทนำสู่ HTTPMESSAGECONVERTER Request Converter Converter:
อินเตอร์เฟส HTTPMESSAGECONVERTER ระบุตัวแปลงที่สามารถแปลงข้อมูลคำขอ HTTP และข้อมูลการตอบกลับ HTTP ในรูปแบบ โดยปกติจะมีตัวแปลงต่อไปนี้ที่ใช้อินเตอร์เฟส HTTPMESSAGECONVERTER:
ByteArrayhttpMessageConverter: รับผิดชอบในการอ่านข้อมูลรูปแบบไบนารีและการเขียนข้อมูลรูปแบบไบนารี;
StringhttpMessageConverter: รับผิดชอบในการอ่านข้อมูลรูปแบบสตริงและการเขียนข้อมูลรูปแบบไบนารี;
ResourcehttpMessageConverter: รับผิดชอบในการอ่านไฟล์ทรัพยากรและการเขียนข้อมูลไฟล์ทรัพยากร
formhttpmessageConverter: รับผิดชอบในการอ่านข้อมูลที่ส่งโดยแบบฟอร์ม (รูปแบบข้อมูลที่สามารถอ่านได้คือแอปพลิเคชัน/x-www-form-urlencoded และไม่สามารถอ่านข้อมูลรูปแบบแบบหลายพาร์ท/ฟอร์มข้อมูล); รับผิดชอบในการเขียนข้อมูลในแอปพลิเคชัน/X-WWW-FROM-URLENCODED และรูปแบบหลายรูปแบบ/รูปแบบ
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 บางวิธีใช้วิธีการตอบสนอง getWriter (). print () อีกวิธีที่ดีกว่าคือการเพิ่มคำอธิบายประกอบ @ResponseBody เพื่อส่งคืนข้อมูลประเภทแผนที่โดยตรงและตัวแปลงจะแปลงเป็นประเภทข้อมูล JSON โดยอัตโนมัติ