1. บทนำ
บทความนี้ส่วนใหญ่แนะนำวิธีการใช้บริการแบ็กเอนด์ SpringMVC เพื่อรองรับประเภทค่าส่งคืนหลายประเภท (XML, JSON, HTML, Excel) ผ่านการกำหนดค่า
รหัสที่นี่ใช้ Springboot, ดาวน์โหลดที่อยู่: https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. แนวคิดพื้นฐาน
2.1 ความแตกต่างระหว่างประเภทเนื้อหาและยอมรับการตั้งค่าใน httpheader
ยอมรับ: รูปแบบข้อมูลที่จะส่งคืนไปยังไคลเอนต์โดยอินเทอร์เฟซ
Curl -header 'ยอมรับ: แอปพลิเคชัน/json' http: // localhost: 8080/todo
ประเภทเนื้อหา: รูปแบบข้อมูลที่ส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์
Curl -x put -header 'content -type: application/json' -d '{"title": "กำหนดการวันหยุดสุดสัปดาห์", "เนื้อหา": "sleep"}' http: // localhost: 8080/todo2.2 สองวิธีในการสร้างผลลัพธ์ใน SpringMVC
1) เมื่อเซิร์ฟเวอร์ใช้วิธีการพักผ่อนเพื่อให้ข้อมูลสำหรับ AJAX หรือคำขอเซิร์ฟเวอร์อื่น ๆ ของไคลเอ็นต์เท่านั้น @ResponseBody มักจะใช้เพื่อระบุการส่งคืนของคุณ ในเวลานี้สปริงใช้ httpmessageConverter เพื่อจัดรูปแบบวัตถุที่ส่งคืนในรูปแบบที่ต้องการ
2) เมื่อคุณต้องการให้เลเยอร์การนำเสนอ (เช่น HTML) SpringMVC ใช้ ViewResolver เพื่อประมวลผลการส่งคืนของคุณ
บางครั้งแอปพลิเคชันของคุณต้องให้ทั้งสองอย่าง
2.3 การกำหนดรูปแบบเอาต์พุตของ SpringMVC
หลายครั้งเพื่อรองรับหลายระบบหรือหลายขั้วคุณต้องส่งออกข้อมูลเดียวกันในอาการที่แตกต่างกัน
SpringMVC ใช้ ContentNegotationStrategy เพื่อกำหนดรูปแบบของข้อมูลที่ผู้ใช้ร้องขอให้รับ
ContentNegotationStrategy ใช้สามวิธีในการระบุประเภทของข้อมูลที่ผู้ใช้ต้องการส่งคืน
โปรดดูการกำหนดค่าด้านล่าง
@OverridePublic Void ConfigureContentNegotiation (ContentNegotiationConfigurer กำหนดค่า) {configurer.FavorPathExtension (เท็จ). FavorParameter (จริง). parameterName ("MediaType") .DefaultContenttype .mediatype ("html", mediaType.text_html) .mediatype ("JSON", mediaType.application_json);}เพิ่มการกำหนดค่าข้างต้นไปยัง WebMVCCONFIG ของโครงการของคุณซึ่งหมายถึงการปิดกฎของคำต่อท้าย URL เปิดกฎพารามิเตอร์การร้องขอและการตั้งค่าพารามิเตอร์คำขอเป็น 'MediaType' รูปแบบการส่งคืนเริ่มต้นคือ JSON และยังรองรับการส่งคืน XML และ HTML
องค์ประกอบทั้งสามนี้เป็นกุญแจสำคัญในการส่งคืนผลลัพธ์ในรูปแบบที่แตกต่างกัน
2.4 requestmappings
2.4.1 requestmappinghandlermapping
สิ่งที่เรามักจะใช้ในฤดูใบไม้ผลิคือการร้องขอ mappinghandlermapping ตามคำขอของ MappingInfo เราปรับแต่งเงื่อนไขการจับคู่ กระบวนการค้นหาโดยรวมมีดังนี้:
abstracthandlermethodmapping อินเตอร์เฟสการใช้งาน GethandlerInternal
1. ใช้ urlpathhelper เพื่อค้นหาเส้นทางที่สอดคล้องกับคำขอ
2. ค้นหาวิธีการที่สอดคล้องกับเส้นทาง
2.1 ค้นหาเงื่อนไขการจับคู่จาก urlmap requestmappinginfo
2.2 หากพบเงื่อนไขการจับคู่ในค่าที่เทียบเท่าให้เพิ่มลงในเงื่อนไขการจับคู่
2.3 หากไม่พบเงื่อนไขการจับคู่ให้ใช้ requestmappinginfo ของ handlermethods ทั้งหมดให้ตรงกับ
2.4 เรียงลำดับการแข่งขันนำการจับคู่ลำดับความสำคัญสูงสุดและตรวจสอบว่าเป็นลำดับความสำคัญสูงสุดเพียงอย่างเดียว
2.5: ห่อหุ้มสถานการณ์ทั้งสองที่มีการจับคู่เงื่อนไขและเงื่อนไขไม่ตรงกัน
3. Handlemnethod สำหรับตรวจสอบให้แน่ใจว่าอินสแตนซ์ของถั่วถูกเก็บไว้ใน ContentNegotiationManager ซึ่งให้การเปรียบเทียบเงื่อนไขการจับคู่สำหรับ MinityPe เพื่อให้เฟรมเวิร์กสามารถจับคู่วิธีการประมวลผลที่เหมาะสมที่สุด
2.5 httpmessageconverter
2.5.1 ตัวแปลงข้อความเริ่มต้น
SpringMVC จะโหลด httpmessageConverters ต่อไปนี้โดยค่าเริ่มต้น:
ByteArrayhttpmessageConverter แปลง Byte ArraySstringhttpmessageConverter แปลง StringsResourcehttpmessageconverter แปลง Org.springframework.core.io javax.xml.transform.sourceformhttpmessageConverter แปลงข้อมูลฟอร์มเป็น/จาก multivaluemap <string, string> .jaxb2rootelementhttpmessageconverter แปลง java objects เป็น/จาก XML (เพิ่มเฉพาะในกรณีที่แจ็คสัน 2 มีอยู่ใน classpath) MappingJacksonhttpmessageconverter แปลง JSON (เพิ่มเฉพาะในกรณีที่แจ็คสันอยู่ใน classpath) Atomfeedhttpmessageconverter ฟีดฟีด (เพิ่มเข้ามาหากโรม classpath)
หากเราส่งคืนจะถูกระบุโดย @ResponseBody เฟรมเวิร์กจะใช้ httpmessageConverter เพื่อประมวลผลค่าส่งคืน XMLCoverter เริ่มต้นไม่มีประโยชน์อย่างยิ่งและขึ้นอยู่กับคำอธิบายประกอบ @XMLROOTELEMENT บนวัตถุเอนทิตี มันไม่สะดวกมาก ดังนั้นเราจึงแนะนำไลบรารีคลาสเสริมและปรับแต่ง MessageConverter เพื่อให้สามารถประมวลผลวัตถุที่ส่งคืนได้โดยตรงในรูปแบบ XML
ห้องสมุดนำเข้า Gradle
กลุ่มคอมไพล์: 'org.springframework', ชื่อ: 'Spring-oxm', เวอร์ชัน: '4.3.9.release'compile Group:' com.thoughtworks.xstream ', ชื่อ:' xstream ', เวอร์ชัน:' 1.4.10 '
การกำหนดค่า
@OverridePublic เป็นโมฆะ configureMessageConverters (รายการ <httpmessageConverter <? >> ตัวแปลง) {converters.add (createxmlhttpmessageConverter ()); Super.ConfigureMessageConverters (Converters);} ส่วนตัว httpmessageConverter <Object> createxmlhttpmessageConverter () {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-Starter-FreeMarker")สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com