Scala中带有Map.Class参数的Java函数

时间:2018-11-15 16:19:56

标签: scala

我正在尝试使用Jackson的ObjectMapper()函数:convertValue

它需要2个参数(3个重载):

  1. (对象,通话)
  2. (对象,TypeReference)
  3. (对象,JavaType)

我有以下代码:

val m = new ObjectMapper()
val map: Map[String, Object] = m.convertValue(bean, classOf[Map])

不适用于错误Type Mismatch. Expected JavaType actual Class[Map]

我使用classOf[java.util.Map]Map.getClass等进行了测试,但无法使其正常工作。

我应该如何发送该参数?

2 个答案:

答案 0 :(得分:1)

步骤1:查看https://fasterxml.github.io/jackson-databind/javadoc/2.8/com/fasterxml/jackson/databind/JavaType.html。参见

  

实例(只能)由com.fasterxml.jackson.databind.type.TypeFactory构造。

第2步:查看https://fasterxml.github.io/jackson-databind/javadoc/2.8/com/fasterxml/jackson/databind/type/TypeFactory.html

然后您可以看到它可以用作例如

m.getTypeFactory.constructMapType(classOf[java.util.Map[_, _]], classOf[YourKey], classOf[YourValue])

答案 1 :(得分:0)

您可以使用映射器获取JavaType,例如:

val stringType:JavaType  = mapper.constructType(String.class);

您可以尝试以下方法解决问题:

val m = new ObjectMapper()
val mapType:JavaType = mapper.constructType(java.util.Map.class)
val map: Map[String, Object] = m.convertValue(bean, mapType)