ฉันพบ "ปัญหาการดีซีเรียลไลเซชันแบบ Polymorphic" ดังนั้นฉันจึงกำหนดค่าแจ็คสันให้เพิ่มข้อมูลประเภทสำหรับคลาสที่ไม่เป็นรูปธรรมเป็นคุณสมบัติดังต่อไปนี้:
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE))
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_CONCRETE_AND_ARRAYS, "__class__")
มันทำงานได้ดี แต่สำหรับอินสแตนซ์คอลเลกชัน (เช่น รายการ) จะสร้างอาร์เรย์สององค์ประกอบโดยตำแหน่งแรกเก็บสตริงที่มีข้อมูลประเภทของคอลเลกชัน (java.util.ArrayList)
สิ่งนี้ส่งผลต่อโครงสร้างของ json ที่ไคลเอนต์ (Javascript) คาดหวัง เนื่องจากตำแหน่งที่คาดว่าจะมีอาร์เรย์ ขณะนี้มีอาร์เรย์ที่มีอีกอาร์เรย์อยู่ข้างในในตำแหน่งที่สอง
ฉันหวังว่าข้อมูลประเภทการแทรกของ Jackson สำหรับประเภทที่ไม่ใช่คอลเลกชันไม่ใช่ประเภทที่เป็นรูปธรรมเท่านั้น เนื่องจากตัวเฟรมเวิร์กเองไม่ต้องการประเภทการดำเนินการรวบรวมเพื่อทำการดีซีเรียลไลซ์คุณสมบัติการรวบรวมอย่างถูกต้อง
เป็นไปได้ในลักษณะที่กำหนดค่าได้หรือไม่?