0

我有一些像这样的类结构

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 有“@class”,而 C 没有。它符合我的期望。

但是,当我将它应用于 A 类的实例时,“@class”会显示在所有值上,即使它是 C 的实例。另一方面,我在 B 类上删除了@JsonTypeInfo,“@class”甚至不存在如果是 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));

如何在需要时显示“@class”?

4

1 回答 1

0

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

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

于 2015-08-02T09:59:49.350 回答