【发布时间】:2016-11-12 09:52:23
【问题描述】:
我正在尝试将 json 反序列化为 scala 类,其中包含 Aclass、Bclass 或 Cclass 类型的集合
class Results[M](results:util.ArrayList[M]) {
def getResults:util.ArrayList[M]=results
def this() {
this(new util.ArrayList())
}
}
Json 看起来像:
{ "results":[{"a":1},{"a":1}]}
或
{ "results":[{"b":1},{"b":1}]}
或
{ "results":[{"b":1},{"b":1}]}
这是我的对象映射器
val mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
这里我如何反序列化类类型 Aclass 的 json
val results = mapper.readValue(json, classOf[Results[Aclass]])
问题在于,结果返回一个 ArrayList,其中每个元素都不是 Aclass 的一个实例,而是一个 LinkedHashMap。
如果我将代码更改为使用泛型,我会在类型中明确说明
class Results[Aclass](results:util.ArrayList[Aclass]) {
def getResults:util.ArrayList[Aclass]=results
def this() {
this(new util.ArrayList())
}
}
它工作并返回一个带有 Aclass 元素数组结果的类。
我在这里做错了什么?我认为这是库中的错误
问候。
【问题讨论】:
-
你是被 jackson 困住了,还是你也可以使用不基于反射的库(例如 circe 或 argonaut)?
-
完全开放以使用新库,如果不需要太多代码并实现我想要的。但无论如何,我设法使用 TypeFactory 使其工作,但仍然不高兴我的解决方案看起来有多复杂