当前位置: 首页 > 知识库问答 >
问题:

Jackson从使用openapi codegen生成的API返回LinkedHashMap

花欣然
2023-03-14

我有一个Java后端,提供openapi.json规范。它的目的是可以通过openapi生成器创建一个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的列表。

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

事实上,我现在不知道该做什么。在创建api客户机时,我也尝试过使用moshi或gson,但遗憾的是,我们的类嵌套得很深,而这些类不适用。

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

共有1个答案

陆俭
2023-03-14

显然这是个简单的解决办法。不知何故,杰克逊不喜欢kotlin.collection.列表,但它喜欢数组。所以我加了这一行config.json

"collectionType": "array"

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

 类似资料:
  • 与JAXB为给定XSD生成JAXB类类似,Jackson是否提供了从XSD或JSON生成Jackson类的实用程序。 JAXB类geberator已经生成了一组为XSD模式定义的类。例如,对于多态类型,JAXB具有以下注释,以基于XML元素名称来标识名称。 是否可以在杰克逊中创建类似的类。即,基于XML元素名称来标识类型。

  • 问题内容: 我正在使用Spring MVC。我必须编写一个服务,该服务将从请求主体中获取输入,将数据添加到pdf中,然后将pdf文件返回到浏览器。pdf文档是使用itextpdf生成的。如何使用Spring MVC做到这一点。我试过用这个 生成pdf的showhelp函数。我只是暂时将一些随机数据放入pdf中。 我确定这是错误的。我希望生成pdf并通过浏览器打开“保存/打开”对话框,以便可以将其存

  • 编辑: 如果我直接从浏览器命中endpoint,文件就会被正确下载。所以我猜问题出在前面,以及用接收到的数据创建和保存文件的方式。 我有一个Java/spring boot的应用程序,我想在其中构建一个APIendpoint,它创建并返回一个可下载的excel文件。以下是我的控制器endpoint: 这是角度控制器: 和服务: 生成成功,文件已下载,但我认为它已损坏,因为Excel无法打开它。 有

  • 生成器返回值 PHP7支持通过Generator::getReturn获取生成器方法return的返回值。 PHP5中我们约定使用Generator最后一次yield值作为返回值。 <?php final class AsyncTask { public function begin() { return $this->next(); } //

  • 我正在从中生成大量Java文件http://www.ncpdp.org的XSD文件(仅对成员可用)。生成它们之后,我希望在Spring控制器中使用它们,但在将响应转换为XML时遇到问题。 我已经尝试返回元素本身,以及JAXBElement 这是我的控制器: 我试图创建一个MvcConfig来覆盖Spring Boot的MVC配置,但它似乎不起作用。 我需要做什么才能让Spring MVC将我生成的

  • 我正在运行一个方法来导入一个外部组件,该组件仅与Options API一起工作。因此,一旦导入完成,我就需要使用Options API配置组件。 如何访问Options API的区域中的返回的值?这就是我的意思: 如果我运行上面的代码,我会得到错误:。 在本例中,仅与VUE中的Options API一起工作。在可预见的将来,它不能在组合API中配置。因此,如何使用组合API中的引用值在Option