Trong mã Jackson/Java sau đó serializes đối tượng vào JSON, tôi nhận được điều này:Sử dụng Jackson ObjectMapper serialize tên lớp con vào JSON, không phải là lớp cha
{"animal":{"x":"x"}}
Tuy nhiên, những gì tôi thực sự muốn có được là thế này:
{"dog":{"x":"x"}}
có cái gì tôi có thể làm để AnimalContainer vì vậy mà tôi nhận được các loại thời gian chạy ("con chó", "con mèo") của đối tượng, thay vì "động vật")? (Chỉnh sửa: Tôi biết rằng tên bản đồ đến từ các tên phương thức getter và setter.) Cách duy nhất tôi có thể nghĩ là thực hiện nó nằm trong AnimalContainer để có thuộc tính của từng loại động vật, có setters và getters cho tất cả chúng, và thực thi rằng chỉ có một được định giá tại một thời điểm. Nhưng điều này đánh bại mục đích của việc có siêu lớp Thú vật và dường như sai. Và trong mã thực sự của tôi, tôi thực sự có một tá lớp con, không chỉ là "chó" và "mèo". Có cách nào tốt hơn để làm điều này (có lẽ bằng cách sử dụng chú thích bằng cách nào đó)? Tôi cần một giải pháp cho deserializing, là tốt.
public class Test
{
public static void main(String[] args) throws Exception
{
AnimalContainer animalContainer = new AnimalContainer();
animalContainer.setAnimal(new Dog());
StringWriter sw = new StringWriter(); // serialize
ObjectMapper mapper = new ObjectMapper();
MappingJsonFactory jsonFactory = new MappingJsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(sw);
mapper.writeValue(jsonGenerator, animalContainer);
sw.close();
System.out.println(sw.getBuffer().toString());
}
public static class AnimalContainer
{
private Animal animal;
public Animal getAnimal() {return animal;}
public void setAnimal(Animal animal) {this.animal = animal;}
}
public abstract static class Animal
{
String x = "x";
public String getX() {return x;}
}
public static class Dog extends Animal {}
public static class Cat extends Animal {}
}
có cách nào để giải quyết với 'ObjectMapper.enableDefaultTyping()' mà không cần Animal là Tóm tắt? Tôi đang sử dụng Jackson 1.9 và tôi đã thử nhưng vẫn không hoạt động ..... –
Nhập mặc định có thể sử dụng các loại tiêu chí khác nhau, xem javadocs, bao gồm định nghĩa tùy chỉnh về những gì nó nên áp dụng. – StaxMan