我有以下课程,它按预期工作:
class TestClass
{
@Inject
public TestClass(
String type,
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = String.class, name = "expression"),
@JsonSubTypes.Type(value = List.class, name = "simple")
})
Object value)
{
}
}
问题是我需要使用枚举来映射值,所以我做了以下内容:
class TestClass
{
@Inject
public TestClass(
String type,
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = String.class, name = MyEnum.EXPRESSION),
@JsonSubTypes.Type(value = List.class, name = MyEnum.SIMPLE)
})
Object value)
{
}
}
它不起作用,因为MyEnum不是String,并且注释值必须是常量,所以我不能动态地枚举。理想情况下,我会将type
字段的值解析为MyEnum
,并根据类型的值映射子类型。