Программный способ @JsonSubTypes и @JsonTypeInfo - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующий класс, и он работает как ожидалось:

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 и сопоставлять подтипы на основе значения типа.

...