Jackson-基于同级属性的属性多态映射

我找不到以下用例的方法,请让我知道是否遗漏了类似的问题。

所以,我有以下模型:

public class ResponseDemo {
    public static enum Type {FOO,BAR}

    private Type type;
    private Parameters params;
    ... // Other attributes,getters and setters.
}
public abstract class Parameters {
    public static class FooParameters extends Parameters {
        String foo;
        // Getters and setters
    }
    public static class BarParameters extends Parameters {
        String bar;
        // Getters and setters
    }
}

然后,假设我收到这样的内容:

{
    "type": "FOO",...
    "params": {
        "foo": "fooValue"
    }
    ...
}

因为 type 的值是 FOO ,所以我想以这样的方式反序列化

Assert.assertEquals(deserealizedResponse.getType(),"FOO")
Assert.assertTrue(deserealizedResponse.getParams() instanceof FooParameters)
Assert.assertEquals(((FooParameters) deserealizedResponse.getParams()).getFoo(),"fooValue")

以类似的方式,如果我有这样的东西:

{
    "type": "BAR",...
    "params": {
        "bar": "barValue"
    }
    ...
}
Assert.assertEquals(deserealizedResponse.getType(),"BAR")
Assert.assertTrue(deserealizedResponse.getParams() instanceof BarParameters)
Assert.assertEquals(((BarParameters) deserealizedResponse.getParams()).getBar(),"barValue")

您知道如何做到这一点吗?我试图避免使用自定义Deserealizer,因为我必须手动映射我省略的所有其他属性(如 ... )。


修改

我想做类似的事情:

public class ResponseDemo {
    public static enum Type {FOO,BAR}

    private Type type;

    /**
     * The following but taking the value from type attribute above instead of inside the object
     */
    @JsonSubTypes({
            @JsonSubTypes.Type(value = FooParameters.class,name = "foo"),@JsonSubTypes.Type(value = BarParameters.class,name = "bar"),})
    private Parameters params;
    ... // Other attributes,getters and setters.
}
shehuan 回答:Jackson-基于同级属性的属性多态映射

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3121571.html

大家都在问