从我的Java后端,我正在使用另一个我不管理的后端,它的API定义不可用。我正在创建它的服务的OpenAPI定义,并使用Swagger Codigen来生成客户端。
有一个endpoint返回一个复杂对象:
{
"total": 151,
"version": 4,
"dynamicItem1": [
"codeDynamicItem1",
293,
63700,
19,
"nameDynamicItem1",
"",
"",
"",
0,
-64
],
"dynamicItem2": [
"codeDynamicItem2",
237,
40000,
478,
"nameDynamicItem2",
"string1",
"string2",
"string3",
0,
0
]
}
在该对象中,total
和version
始终存在,但在同一级别上有数百个动态项。在上面的示例中,关键点是可以预测的,但实际上是字母和数字的序列,类似于“245df921”。动态项始终是具有相同项数和相同预期位置的数组。
为了解析该对象,我使用了附加属性,因为我读到它是解析hashmap的正确方法,但似乎我没有正确应用它。
当前,我的OpenAPI表示形式如下所示:
openapi: 3.0.2
info:
version: 1.0.0
title: title
description: description
paths:
/complexObject:
get:
responses:
'200':
description: "OK"
content:
application/json:
schema:
$ref: '#/components/schemas/Object'
components:
schemas:
Object:
type: object
properties:
total:
type: number
example: 151
version:
type: number
example: 4
additionalProperties:
type: array
items:
type: string
nullable: true
使用该实现可以正确返回total
和version
,但是在响应对象中有一个additionalProperties
属性,该属性的值为null。
我错过了什么?
附加属性
需要与属性
处于同一级别。
此外,由于这些动态数组是多类型(字符串/整数),您需要oneOf
来定义可能的项类型。
components:
schemas:
Object:
type: object
properties:
total:
type: number
example: 151
version:
type: number
example: 4
additionalProperties: # <-----
type: array
items:
oneOf: # <-----
- type: string
nullable: true
- type: integer
问题内容: 我有以下需要反序列化的Json字符串。 第一个字段“ 123456789”是一个ID号,因此基本上该值可以根据要查询的数据而有所不同。 我在Visual Studio中使用C#。显然,因为第一个字段的值可以更改,所以我无法使用预定义的类将JSON反序列化为该字段,因为该字段将用作类名,但该字段的值与该类名不匹配。 有没有一种方法可以将其反序列化为某种动态类,但仍可以像访问预定义类一样访
我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它
问题内容: 场景: 考虑以下是JSON: 如果注意到的话,数据的结构方式是没有硬编码键提及/ 它基本上只是值。 问题: 我无法解析任何动态的JSON。 问题: 有人能找到这种JSON解析的解决方案吗?我尝试了go-simplejson,gabs和default 但没有运气。 注意: 上面的JSON仅用于示例。而且有许多应用程序正在使用当前的API,因此我不想更改数据的结构。我的意思是我不能更改为以
场景: 考虑以下是JSON: 如果您注意到,数据的结构是这样的,即没有硬编码键提到/基本上只是值。 问题:我无法解析任何动态 JSON。 问题:有人能找到这种JSON解析的解决方案吗?我试着简单点 注意:以上JSON只是示例。有很多应用程序正在使用当前的API,所以我不想改变数据的结构。我的意思是我不能换成如下的东西: 然后我可以定义< code>struct
I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器