Tôi có một lớp Java MyPojo
mà tôi quan tâm đến việc giải mã hóa từ JSON. Tôi đã định cấu hình một lớp MixIn đặc biệt MyPojoDeMixIn
, để hỗ trợ tôi giải quyết vấn đề. MyPojo
chỉ có int
và String
các biến phiên bản được kết hợp với getters và setters thích hợp. MyPojoDeMixIn
trông giống như sau:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
Trong ứng dụng khách thử nghiệm của mình, tôi làm như sau, nhưng tất nhiên nó không hoạt động tại thời điểm biên dịch vì có JsonMappingException
liên quan đến kiểu không khớp.
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) }
Tôi biết rằng tôi có thể giảm bớt vấn đề này bằng cách tạo một đối tượng "Phản hồi" chỉ có một đối tượng ArrayList<MyPojo>
trong đó, nhưng sau đó tôi sẽ phải tạo các đối tượng hơi vô dụng này cho mọi kiểu mà tôi muốn trả lại.
Tôi cũng đã xem trực tuyến JacksonInFiveMinutes nhưng đã có một khoảng thời gian khủng khiếp khi hiểu nội dung Map<A,B>
và cách nó liên quan đến vấn đề của tôi. Nếu bạn không thể nói, tôi hoàn toàn mới đối với Java và đến từ nền tảng obj-C. Họ đề cập cụ thể:
Ngoài liên kết với POJO và các loại "đơn giản", có một biến thể bổ sung: biến thể liên kết với các vùng chứa chung chung (đã định). Trường hợp này yêu cầu xử lý đặc biệt do cái gọi là Type Erasure (được Java sử dụng để triển khai generic theo cách tương thích ngược), ngăn bạn sử dụng thứ gì đó như Collection.class (không biên dịch).
Vì vậy, nếu bạn muốn liên kết dữ liệu vào một Bản đồ, bạn sẽ cần sử dụng:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Làm cách nào để tôi có thể deserialize trực tiếp đến ArrayList
?