Tôi gặp sự cố trong bộ khử không khí tùy chỉnh của mình ở Jackson. Tôi muốn truy cập trình tuần tự hóa mặc định để điền vào đối tượng mà tôi đang giải mã. Sau khi dân số, tôi sẽ thực hiện một số điều tùy chỉnh nhưng trước tiên tôi muốn deserialize đối tượng với hành vi Jackson mặc định.
Đây là mã mà tôi có vào lúc này.
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;
}
}
Những gì tôi cần là một cách để khởi tạo bộ giải mã mặc định để tôi có thể điền trước POJO của mình trước khi bắt đầu logic đặc biệt của mình.
Khi gọi deserialize từ bên trong bộ giải mã tùy chỉnh Có vẻ như phương thức được gọi từ ngữ cảnh hiện tại bất kể tôi xây dựng lớp tuần tự hóa như thế nào. Vì chú thích trong POJO của tôi. Điều này gây ra ngoại lệ Stack Overflow vì những lý do rõ ràng.
Tôi đã thử khởi tạo a BeanDeserializer
nhưng quá trình này cực kỳ phức tạp và tôi chưa tìm ra cách phù hợp để thực hiện. Tôi cũng đã thử quá tải nhưng AnnotationIntrospector
không có kết quả, nghĩ rằng nó có thể giúp tôi bỏ qua chú thích trong DeserializerContext
. Cuối cùng, nó nối với nhau mà tôi có thể đã thành công khi sử dụng JsonDeserializerBuilders
mặc dù điều này đòi hỏi tôi phải làm một số công cụ kỳ diệu để nắm được bối cảnh ứng dụng từ Spring. Tôi sẽ đánh giá cao bất kỳ điều nào có thể dẫn tôi đến một giải pháp rõ ràng hơn, chẳng hạn như cách Tôi có thể xây dựng bối cảnh deserialization mà không cần đọc JsonDeserializer
chú thích.
DeserializationContext
không phải là thứ bạn nên tạo hoặc thay đổi; nó sẽ được cung cấp bởiObjectMapper
.AnnotationIntrospector
, tương tự như vậy, sẽ không giúp được gì trong việc truy cập.