Jackson: InvalidDefinitionException с использованием [Ljava.lang.Double

Greenleaf спросил: 28 апреля 2018 в 09:42 в: java

Я использую Jackson для сопоставления следующего 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 для формата файла класса, значение должно быть правильным.

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

UPDATE:
Я использовал "[L", поскольку я хочу иметь класс Double [].


1 ответ

Есть решение
soon ответил: 28 апреля 2018 в 09:59

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

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}
Greenleaf ответил: 28 апреля 2018 в 09:58
это работает, спасибо :)