Джексон: InvalidDefinitionException с использованием [Ljava.lang.Double - PullRequest
0 голосов
/ 22 мая 2018

Я использую Джексона для отображения следующего json в Map<String, Class>:

    {
    "keyA": "java.lang.Double",
    "keyB": "[Ljava.lang.Double"
    }

Но я получаю следующее исключение:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.lang.Class`, problem: [Ljava/lang/Double

Ссылаясь на документация Java для файла формата класса значение должно быть правильным.

У кого-нибудь есть идеи, как решить эту проблему?

ОБНОВЛЕНИЕ:
Я использовал «[L», так как хочу получить класс Double [].

1 Ответ

0 голосов
/ 22 мая 2018

Согласно документации тип объекта должен заканчиваться точкой с запятой:

ObjectType:
    L ClassName ;

Изменить keyB на [Ljava.lang.Double;:

String jsonInput = "{\n" +
  "    \"keyA\": \"java.lang.Double\",\n" +
  "    \"keyB\": \"[Ljava.lang.Double;\",\n" +
  "    \"keyC\": \"java.lang.Double\"\n" +
  "    }";
TypeReference<HashMap<String, Class>> typeRef
  = new TypeReference<HashMap<String, Class>>() {};
ObjectMapper mapper = new ObjectMapper();
Map<String, Class> map = mapper.readValue(jsonInput, typeRef);
System.out.println(map);

Вывод:

{keyA=class java.lang.Double, keyB=class [Ljava.lang.Double;, keyC=class java.lang.Double}
...