【问题标题】:jackson: InvalidDefinitionException using [Ljava.lang.Double杰克逊:使用 [Ljava.lang.Double 的 InvalidDefinitionException
【发布时间】:2018-11-01 03:33:31
【问题描述】:

我正在使用 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 值应该是正确的。

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

更新:
我使用“[L”,因为我想要一个 Double[] 的类。

【问题讨论】:

  • [Ljava/lang/Double[L 的开头似乎有额外的两个字符。是错字吗??
  • 我使用 [L 是因为我现在想要一个 Double[].class

标签: java data-binding jackson fasterxml


【解决方案1】:

根据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}

【讨论】:

    猜你喜欢
    • 2020-04-12
    • 2019-10-11
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2020-10-16
    • 2011-08-25
    相关资源
    最近更新 更多