如果您只关心反序列化,则可以将name
元素的值设置@JsonSubTypes.Type
为整数的字符串表示形式。这将从 JSON 中的数字值正确反序列化。但是,在序列化时,它将序列化为该值的字符串表示形式而不是数字(例如"1"
,而不是1
)。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "methodName")
@JsonSubTypes({
@JsonSubTypes.Type(value = MyFirstClass.class, name = "1"),
@JsonSubTypes.Type(value = MySecondClass.class, name = "2")})
或者,如果您愿意为该值添加一个复制值声明的方法,则可以使用更多样板代码将其序列化和反序列化为数字而不是字符串@JsonSubTypes.Type
:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "methodName", include = JsonTypeInfo.As.EXISTING_PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = MyFirstClass.class, name = "1"),
@JsonSubTypes.Type(value = MySecondClass.class, name = "2")})
public static abstract class Superclass {
public abstract int getMethodName();
}
public static class MyFirstClass extends Superclass {
@Override
public int getMethodName() {
return 1;
}
}
public static class MySecondClass extends Superclass {
@Override
public int getMethodName() {
return 2;
}
}