如何在多态中用@JsonTypeInfo控制@class

时间:2015-07-29 05:54:31

标签: java arrays json annotations fasterxml

我有一些像这样的类结构

class A {
    private List<B> b;

    public List<B> getB() {
        return b;
    }

    public void setB(List<B> b) {
        this.b = b;
    }

}

@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="@class")
abstract class B {

}

@JsonTypeInfo(use=Id.NONE)
class C extends B {

}

@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="@class")
class D extends B {

}

当我使用ObjectMapper(fasterxml)以JSON格式(例如C和D)编写它时,D有&#34; @ class&#34;而C没有。它满足了我的期望。

然而,当我将它应用于A类的实例时,&#34; @ class&#34;显示所有值,即使它是C的实例。另一方面,我删除了B类的@JsonTypeInfo,&#34; @ class&#34;即使它是D的实例也不存在。

这是我的测试代码

List<B> list = new ArrayList<B>();
    list.add(new D());
    list.add(new C());

    list.forEach(p->{try {
        System.out.println(mapper.writeValueAsString(p));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }});

    A a = new A();
    a.setB(list);
    System.out.println(mapper.writeValueAsString(a));

我如何制作&#34; @ class&#34;显示何时需要?

1 个答案:

答案 0 :(得分:0)

这时,我需要通过使用两个单独的类来重构我的模型的结构,一个类包含Id = CLASS,另一个包含NONE。

我希望有更好的解决方案。