jackson:使用[Ljava.lang.Double的InvalidDefinitionException

时间:2018-05-22 11:22:38

标签: java data-binding jackson fasterxml

我使用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

参考the Java documentation for class file format值应该是正确的。

有没有人知道如何解决这个问题?

更新:
我用过&#34; [L&#34;因为我想拥有Double []的类。

1 个答案:

答案 0 :(得分:0)

根据documentation,对象类型必须以分号结尾:

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}