Tôi đang cố gắng tuần tự hóa một POJO bất biến đến và từ JSON, bằng cách sử dụng Jackson 2.1.4 mà không cần phải viết serializer tùy chỉnh và ít chú thích nhất có thể. Tôi cũng muốn tránh phải thêm getters không cần thiết hoặc các nhà xây dựng mặc định chỉ để đáp ứng thư viện Jackson.Không đổi/đa hình POJO <-> JSON serialization với Jackson
Tôi bây giờ bị mắc kẹt trên các ngoại lệ:
JsonMappingException: Không có nhà xây dựng phù hợp tìm thấy cho loại [kiểu đơn giản, lớp vòng]: không thể nhanh chóng từ đối tượng JSON (cần phải thêm/cho phép loại thông tin?)
mã:
public abstract class Shape {}
public class Circle extends Shape {
public final int radius; // Immutable - no getter needed
public Circle(int radius) {
this.radius = radius;
}
}
public class Rectangle extends Shape {
public final int w; // Immutable - no getter needed
public final int h; // Immutable - no getter needed
public Rectangle(int w, int h) {
this.w = w;
this.h = h;
}
}
mã kiểm tra:
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); // Adds type info
Shape circle = new Circle(10);
Shape rectangle = new Rectangle(20, 30);
String jsonCircle = mapper.writeValueAsString(circle);
String jsonRectangle = mapper.writeValueAsString(rectangle);
System.out.println(jsonCircle); // {"@class":"Circle","radius":123}
System.out.println(jsonRectangle); // {"@class":"Rectangle","w":20,"h":30}
// Throws:
// JsonMappingException: No suitable constructor found.
// Can not instantiate from JSON object (need to add/enable type information?)
Shape newCircle = mapper.readValue(jsonCircle, Shape.class);
Shape newRectangle = mapper.readValue(jsonRectangle, Shape.class);
System.out.println("newCircle = " + newCircle);
System.out.println("newRectangle = " + newRectangle);
Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn!
Nhìn đầy hứa hẹn, nhưng bây giờ tôi nhận được ngoại lệ sau đây thay vì: JsonMappingException: Đối số # 0 của constructor [constructor cho Circle, chú thích: {giao diện [email protected]son .annotation.JsonCreator()}] không có chú thích tên thuộc tính; phải có tên khi hàm tạo đa tham số được chú thích là Người tạo – hammarback
Mặc dù chú thích @JsonProperty xuất hiện? – nutlike
Có, như trong ví dụ của bạn. Trên tất cả các đối số hàm tạo. – hammarback