Bạn có thể sử dụng chú thích Mixin để chú thích POJO của mình và BasicDBObject
(hoặc DBObject
), vì vậy chú thích không phải là một vấn đề. Kể từ BasicDBOject
là một bản đồ, bạn có thể sử dụng @JsonAnySetter
trên phương pháp đưa.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
Đây là tất cả những gì tôi có thể nghĩ ra vì tôi không có kinh nghiệm với Đối tượng MongoDB.
Cập nhật: MixIn về cơ bản là một cơ chế Jackson để thêm chú thích vào một lớp mà không cần sửa đổi lớp đã nói. Điều này hoàn toàn phù hợp khi bạn không có quyền kiểm soát lớp bạn muốn điều chỉnh (như khi nó từ một lọ bên ngoài) hoặc khi bạn không muốn làm lộn xộn các lớp của mình bằng chú thích.
Trong trường hợp của bạn ở đây, bạn đã nói rằng BasicDBObject
triển khai Map
giao diện, để lớp đó có phương thức put
, như được xác định bởi giao diện bản đồ. Bằng cách thêm @JsonAnySetter với phương thức đó, bạn nói với Jackson rằng bất cứ khi nào anh ta tìm thấy một thuộc tính mà anh ta không biết sau khi xem xét nội bộ của lớp để sử dụng phương thức để chèn thuộc tính vào đối tượng. Chìa khóa là tên của thuộc tính và giá trị, tốt, là giá trị của thuộc tính.
Tất cả những điều này kết hợp làm cho bản đồ trung gian biến mất, vì Jackson sẽ trực tiếp chuyển đổi thành BasicDBOject
bởi vì bây giờ nó biết cách giải mã lớp đó khỏi Json. Với cấu hình đó, bạn có thể thực hiện:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Lưu ý rằng tôi chưa thử nghiệm điều này vì tôi không làm việc với MongoDB, vì vậy có thể có một số kết thúc lỏng lẻo. Tuy nhiên, tôi đã sử dụng cơ chế tương tự cho các trường hợp sử dụng tương tự mà không gặp vấn đề gì. YMMV tùy thuộc vào các lớp.