我正在尝试编组/解组以下类结构:
public class Zoo {
public String name;
public List<Animal> animals;
}
public class Animal {
public String species;
}
public class Lion extends Animal {
public int maxSpeed;
}
public class Owl extends Animal {
public int maxHeight;
}
我正在使用以下Jersey功能对此进行测试:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Zoo get() {
Zoo zoo = new Zoo();
zoo.name = "NY";
Lion lion = new Lion();
lion.species = "Lion";
lion.maxSpeed = 100;
Owl owl = new Owl();
owl.species = "Owl";
owl.maxHeight = 200;
List<Animal> animals = new ArrayList<>();
animals.add(lion);
animals.add(owl);
zoo.animals = animals;
return zoo;
}
返回以下json:
{
"name": "NY",
"animals": [{
"species": "Lion"
}, {
"species": "Owl"
}]
}
当我实际上在寻找如下输出时:
{
"name": "NY",
"animals": [{
"species": "Lion", "maxSpeed": 100
}, {
"species": "Owl", "maxHeight": 200
}]
}
我理解为什么maxSpeed和maxHeight属性不会出现在json中(好吧,我猜这个库使用了反射,因此在询问所有属性时它只有动物的那些属性才有意义)。但无法真正弄清楚如何实现这一目标。我没有成功尝试为maxSpeed字段(Lion类)创建XmlAdapter。没啥事儿。这是有道理的,因为这仍然是一个动物。
Animal类最初是抽象的,但在POST过程中,moxy需要实例化它,所以我删除了限定符。
有人可以请我提示如何做到这一点吗?
重要的是要提到我需要向两个方向(marshal / unmarshal)进行,如果这是不可能的,我会欣赏有关如何在json中表示这一点的其他想法(多个动物可以在那里,甚至多个狮子和猫头鹰)。