ในกระบวนการสร้างบริการข้อมูล RESTful เราได้กำหนดคอนโทรลเลอร์และที่เก็บและแก้ไขด้วยคำอธิบายประกอบบางอย่าง แต่จนถึงตอนนี้เรายังไม่ได้ทำการแปลงวัตถุ - แปลงวัตถุเอนทิตี Java เป็นสตรีมเอาต์พุตข้อมูล HTTP เลเยอร์พื้นฐานของ Spring Boot ใช้ httpmessageConverters เพื่อส่งออกคลาส Java Entity ในรูปแบบ JSON โดยอาศัยไลบรารี Jackson เมื่อมีตัวแปลงหลายตัวเลือกตัวแปลงที่เหมาะสมที่สุดที่จะใช้ตามประเภทวัตถุข้อความและประเภทเนื้อหาที่ต้องการ
ในบทความ httpmessageConverter, การวิเคราะห์ซอร์สโค้ด SpringMVC มีไดอะแกรมที่ระบุตำแหน่งของตัวแปลงข้อความอย่างชัดเจน
ตำแหน่งของตัวแปลงข้อความ
เป้าหมายของตัวแปลงข้อความคือ: การแปลงรูปแบบการร้องขออินพุต HTTP เป็นวัตถุ Java; การแปลงวัตถุ Java เป็นคำขอเอาต์พุต HTTP ตัวแปลงข้อความบางตัวรองรับเฉพาะหลายประเภทข้อมูลบางประเภทรองรับรูปแบบเอาต์พุตหลายรูปแบบและบางส่วนมีทั้งสองอย่าง ตัวอย่างเช่น: MappingJackson2httpmessageConverter สามารถแปลงวัตถุ Java เป็นแอปพลิเคชัน/JSON ในขณะที่ protobufhttpmessageConverter รองรับอินพุตของ com.google.protobuf.message เท่านั้น
ทำอย่างไร
มีสามวิธีในการกำหนดค่าตัวแปลงข้อความในโครงการความแตกต่างหลักคือการวัดความสามารถในการปรับแต่งและความสะดวกในการใช้งาน
เพิ่ม @bean นิยามในคลาส WebConfiguration
@BeanPublic ByteArrayhttpMessageConverter ByteArrayhttpMessageConverter () {ส่งคืน ByteArrayhttpMessageConverter ใหม่ ();} แทนที่เมธอด configureMessageConverters เพื่อขยายรายการข้อความที่เชื่อมโยงตัวแปลงข้อความที่มีอยู่
@OverridePublic เป็นโมฆะ configureMessageConverters (รายการ <httpMessageConverter <? >> ตัวแปลง) {converters.add (ใหม่ ByteArrayhttpMessageConverter ());}; สำหรับการควบคุมเพิ่มเติมคุณสามารถเขียนเมธอด ExtendMessageConverters ใหม่ก่อนที่จะล้างรายการตัวแปลงก่อนจากนั้นเพิ่มตัวแปลงที่กำหนดเอง
@OverridePublic เป็นโมฆะ ExtermessageConverters (รายการ <httpmessageConverter <? >> ตัวแปลง) {converters.clear (); Converters.Add (New ByteArrayhttpMessageConverter ());}วิเคราะห์
ฤดูใบไม้ผลิมีหลายวิธีในการทำภารกิจเดียวกันให้สำเร็จและสิ่งใดที่เลือกขึ้นอยู่กับว่าเรามุ่งเน้นไปที่ความสะดวกสบายหรือการปรับแต่งได้มากขึ้น
อะไรคือความแตกต่างระหว่างสามวิธีที่กล่าวถึงข้างต้น?
การกำหนด httpmessageconverter ผ่าน @bean เป็นวิธีที่ง่ายที่สุดในการเพิ่มตัวแปลงข้อความในโครงการของคุณคล้ายกับการเพิ่มตัวกรอง servlet ดังกล่าว หากสปริงสแกนไปที่ถั่วประเภท httpmessageconverter มันจะถูกเพิ่มลงในห่วงโซ่การโทรโดยอัตโนมัติ ขอแนะนำให้สืบทอด WebConfiguration ในโครงการจาก WebMVCCONFigurerAdapter
มันสะดวกในการเพิ่มตัวแปลงที่กำหนดเองโดยการเขียนวิธีการกำหนดค่า configureMessageConverters ใหม่ แต่มีความอ่อนแอ: หากมีหลายอินสแตนซ์ของ WebMVCCONFigurers ในโครงการ (ซึ่งเรากำหนดตัวเราเอง
หากจำเป็นต้องมีการควบคุมแบบละเอียดมากขึ้น: การล้างตัวแปลงข้อความอื่น ๆ หรือตัวแปลงที่ซ้ำกันอย่างชัดเจนสามารถทำได้โดยการเขียน ExtermessageConverters ใหม่และยังมีความเป็นไปได้นี้: WebMVCCONFigurer อื่น ๆ สามารถเขียนวิธีนี้ใหม่ได้
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น