使用moxy

时间:2016-09-28 19:07:27

标签: java json jersey moxy

我正在尝试编组/解组以下类结构:

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中表示这一点的其他想法(多个动物可以在那里,甚至多个狮子和猫头鹰)。

0 个答案:

没有答案