杰克逊从使用openapi-codegen生成的API返回LinkedHashMap

问题描述

我有一个提供openapi.json规范的Java后端。其目的是可以通过openapi-generator创建API客户端。这就是我所做的。客户表现得很好,每个班级都很完美,他们都有应有的属性,依此类推。此类是一个示例:

public final data class Project public constructor(
    name: kotlin.String,title: kotlin.String,previewUrl: kotlin.String,connections: kotlin.collections.List<kotlin.String>? /* = compiled code */,mapWindows: kotlin.collections.List<kotlin.String>? /* = compiled code */,ribbons: kotlin.collections.List<kotlin.String>? /* = compiled code */
) {
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val connections: kotlin.collections.List<kotlin.String>? /* compiled code */
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val mapWindows: kotlin.collections.List<kotlin.String>? /* compiled code */
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val name: kotlin.String /* compiled code */
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val previewUrl: kotlin.String /* compiled code */
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val ribbons: kotlin.collections.List<kotlin.String>? /* compiled code */
    @field:com.fasterxml.jackson.annotation.JsonProperty public final val title: kotlin.String /* compiled code */
}

如您所见,此类看起来很好。

然后我有一个包含以下功能的服务:

public final fun getProjects(): 
    kotlin.collections.List<bla.bla.bla.Project> {
        /* compiled code */
    }

那么,执行此类时我期望什么?当它返回项目列表时,我也希望获得项目列表。但是相反,我得到了LinkedHashMaps列表。

enter image description here

一旦我处理了这些列表,应用程序就会出现异常。无法将这些LinkedHashMaps强制转换为Project。一旦获得此列表,就意味着“游戏结束”。

实际上,我不知道现在该怎么办。在创建api客户端时,我也尝试使用moshi或gson,但是可悲的是,我们确实嵌套了很多嵌套类,但无法解决这些问题。

有人经历过类似的事情吗?

解决方法

好吧,显然这很容易解决。杰克逊以某种方式不喜欢kotlin.collection.List,但喜欢数组。所以我将这一行添加到config.json:

"collectionType": "array"

就是这样。现在,它将返回具有正确类型的数组。