ฉันมีคลาส Java MyPojo
ที่ฉันสนใจที่จะ deserializing จาก JSON ฉันได้กำหนดค่าคลาส MixIn พิเศษMyPojoDeMixIn
เพื่อช่วยฉันในการ deserialization MyPojo
มีเฉพาะint
และString
ตัวแปรอินสแตนซ์รวมกับ getters และ setters ที่เหมาะสม MyPojoDeMixIn
มีลักษณะดังนี้:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
ในไคลเอนต์ทดสอบของฉันฉันทำสิ่งต่อไปนี้ แต่แน่นอนว่ามันใช้ไม่ได้ในเวลาคอมไพล์เนื่องจากมีความJsonMappingException
เกี่ยวข้องกับประเภทที่ไม่ตรงกัน
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
ฉันทราบดีว่าฉันสามารถบรรเทาปัญหานี้ได้โดยการสร้าง "การตอบกลับ" ที่มีเพียงออบเจ็กต์ArrayList<MyPojo>
ในนั้น แต่ฉันจะต้องสร้างวัตถุที่ค่อนข้างไร้ประโยชน์เหล่านี้สำหรับทุกประเภทที่ฉันต้องการคืน
ฉันยังดูออนไลน์ที่JacksonInFiveMinutesแต่มีช่วงเวลาที่แย่มากในการทำความเข้าใจเกี่ยวกับสิ่งต่างๆMap<A,B>
และความเกี่ยวข้องกับปัญหาของฉัน หากคุณไม่สามารถบอกได้ฉันยังใหม่กับ Java และมาจากพื้นหลัง Obj-C พวกเขากล่าวถึงโดยเฉพาะ:
นอกเหนือจากการเชื่อมโยงกับ POJO และประเภท "แบบง่าย" แล้วยังมีตัวแปรเพิ่มเติมอีกหนึ่งตัวแปรนั่นคือการผูกกับคอนเทนเนอร์ทั่วไป (พิมพ์) กรณีนี้ต้องการการจัดการพิเศษเนื่องจากสิ่งที่เรียกว่า Type Erasure (Java ใช้เพื่อใช้ generics ในลักษณะที่เข้ากันได้ค่อนข้างย้อนหลัง) ซึ่งป้องกันไม่ให้คุณใช้บางอย่างเช่น Collection.class (ซึ่งไม่รวบรวม)
ดังนั้นหากคุณต้องการผูกข้อมูลลงในแผนที่คุณจะต้องใช้:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
ฉันจะ deserialize โดยตรงได้ArrayList
อย่างไร?