我找不到以下用例的方法,请让我知道是否遗漏了类似的问题。
所以,我有以下模型:
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.
}