ฉันมีปัญหาใน deserializer ที่กำหนดเองใน Jackson ฉันต้องการเข้าถึง Serializer เริ่มต้นเพื่อเติมข้อมูลวัตถุที่ฉันกำลังแยกส่วน หลังจากมีประชากรฉันจะทำสิ่งที่กำหนดเอง แต่ก่อนอื่นฉันต้องการยกเลิกการกำหนดค่าเริ่มต้นของวัตถุด้วยพฤติกรรมเริ่มต้นของแจ็คสัน
นี่คือรหัสที่ฉันมีอยู่ในขณะนี้
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my User class.
// How can I do that?
//Special logic
return deserializedUser;
}
}
สิ่งที่ฉันต้องการคือวิธีเริ่มต้น deserializer เริ่มต้นเพื่อให้ฉันสามารถเติม POJO ของฉันล่วงหน้าก่อนที่จะเริ่มตรรกะพิเศษของฉัน
เมื่อเรียก deserialize จากภายใน deserializer ที่กำหนดเองดูเหมือนว่าเมธอดจะถูกเรียกจากบริบทปัจจุบันไม่ว่าฉันจะสร้างคลาส serializer อย่างไร เนื่องจากคำอธิบายประกอบใน POJO ของฉัน สิ่งนี้ทำให้เกิดข้อยกเว้น Stack Overflow ด้วยเหตุผลที่ชัดเจน
ฉันได้ลองเริ่มต้นแล้วBeanDeserializer
แต่กระบวนการนี้ซับซ้อนมากและฉันไม่สามารถหาวิธีที่ถูกต้องได้ ฉันได้พยายามมากเกินไปจนAnnotationIntrospector
ไม่มีประโยชน์โดยคิดว่าอาจช่วยให้ฉันเพิกเฉยต่อคำอธิบายประกอบในไฟล์DeserializerContext
. ในที่สุดฉันก็อาจประสบความสำเร็จในการใช้JsonDeserializerBuilders
แม้ว่าสิ่งนี้จะทำให้ฉันต้องทำของวิเศษเพื่อให้ได้บริบทของแอปพลิเคชันจาก Spring ฉันจะขอบคุณทุกสิ่งที่สามารถนำฉันไปสู่โซลูชันที่สะอาดยิ่งขึ้นเช่นฉันจะสร้างบริบท deserialization ได้อย่างไรโดยไม่ต้องอ่านJsonDeserializer
คำอธิบายประกอบ
DeserializationContext
ไม่ใช่สิ่งที่คุณควรสร้างหรือเปลี่ยนแปลงObjectMapper
ก็จะมีการให้บริการโดยAnnotationIntrospector
ในทำนองเดียวกันจะไม่ช่วยในการเข้าถึง