У меня есть следующий класс, и он работает как ожидалось:
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)
{
}
}
Проблема в том, что мне нужно использовать enum для сопоставления значений, поэтому я сделал следующее:
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 не является строкой, а значения аннотаций должны быть постоянными, поэтому я не могу динамически отображать перечисления. В идеале я буду анализировать значение поля type
в MyEnum
и сопоставлять подтипы на основе значения типа.