Class Jackson从使用openapi codegen生成的API返回LinkedHashMap
我有一个提供openapi.json规范的Java后端。其目的是通过openapi生成器创建API客户机。这就是我所做的。客户端表现得很好,每个类都很完美,它们都有它们应该拥有的属性,等等。这类课程就是一个例子:Class Jackson从使用openapi codegen生成的API返回LinkedHashMap,class,kotlin,jackson,moshi,openapi-generator,Class,Kotlin,Jackson,Moshi,Openapi Generator,我有一个提供openapi.json规范的Java后端。其目的是通过openapi生成器创建API客户机。这就是我所做的。客户端表现得很好,每个类都很完美,它们都有它们应该拥有的属性,等等。这类课程就是一个例子: public final data class Project public constructor( name: kotlin.String, title: kotlin.String, previewUrl: kotlin.String, conne
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 */
}
公共最终数据类项目公共构造函数(
名称:kotlin.String,
标题:kotlin.String,
previewUrl:kotlin.String,
连接:kotlin.collections.List?/*=编译代码*/,,
mapWindows:kotlin.collections.List?/*=编译代码*/,,
ribbons:kotlin.collections.List?/*=编译代码*/
) {
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val connections:kotlin.collections.List?/*编译代码*/
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val mapWindows:kotlin.collections.List?/*编译代码*/
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val name:kotlin.String/*编译代码*/
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val previewUrl:kotlin.String/*编译代码*/
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val ribbons:kotlin.collections.List?/*编译代码*/
@字段:com.fasterxml.jackson.annotation.JsonProperty public final val title:kotlin.String/*编译代码*/
}
如你所见,这门课看起来不错
然后我有一个包含以下功能的服务:
public final fun getProjects():
kotlin.collections.List<bla.bla.bla.Project> {
/* compiled code */
}
public final fun getProjects():
kotlin.collections.List{
/*编译代码*/
}
那么,在执行这个类时,我期望得到什么呢?当它返回一个项目列表时,我还希望得到一个项目列表。但我得到的却是LinkedHashMaps的列表
我一处理这些列表,应用程序就会出现异常。无法将这些LinkedHashMaps强制转换到Project。一旦我得到这份名单,它就意味着“游戏结束”
事实上,我现在不知道该做什么。在创建api客户机时,我也尝试过使用moshi或gson,但遗憾的是,我们的类嵌套得很深,而这些类不适用
有人经历过类似的事情吗?嗯,显然这是一个很容易解决的问题。不知为什么,Jackson不喜欢kotlin.collection.List,但它喜欢数组。因此,我在config.json中添加了这一行:
"collectionType": "array"
就这样。现在它返回正确类型的数组。很显然,这是一个简单的修复方法。不知为什么,Jackson不喜欢kotlin.collection.List,但它喜欢数组。因此,我在config.json中添加了这一行:
"collectionType": "array"
就这样。现在它返回正确类型的数组。无意中发现了这一点,但使用了Moshi/Kotlin OpenAPI生成器(v5.0.0)。上面的解决方法(仍然)有效。我无意中发现了这一点,但使用了Moshi/Kotlin OpenAPI生成器(v5.0.0)。上面的解决方法(仍然)有效。