Json 与 POJO + Jackson 具有相同名称和不同类型的任何字段的模式
Json schema with anyOf field with same name and different types to POJO + Jackson
如果有一个包含组件 A 的架构,其中包含带有两个项目的 AnyOf 部分。它们之间的区别在于,在一种情况下,子组件 C 是数组,而在另一种情况下,子组件 C 是对象,但它们具有相同的名称 B。如果我有两个 java 对象,是否可以用 jackson 处理它?
我在想如果我可以使用带有一些注释的接口,jackson 将确定正确的对象...
"A": {
"type": "object",
"anyOf": [
{
"properties": {
"B": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/components/schemas/C"
}
}
},
"additionalProperties": false
},
{
"properties": {
"B": {
"type": "object",
"$ref": "#/components/schemas/C"
}
},
"additionalProperties": false
}
]
}
假设我在 java
中有这个
public class AAnyOf1 {
@JsonProperty("B")
private List<C> b = new ArrayList<>();
...
}
public class AAnyOf2 {
@JsonProperty("B")
private C b = null;
...
}
这是一种非常流行的模式,可以发送一个 JSON Object
作为响应,而不是 JSON Array
和一个 JSON Object
。所以,而不是:
{
"b": [
{
"id": 1
}
]
}
API
响应如下:
{
"b": {
"id": 1
}
}
Jackson
已经处理了这个用例。您需要启用 ACCEPT_SINGLE_VALUE_AS_ARRAY 功能并且您只需要一个版本的 POJO
:
class AAnyOf {
@JsonProperty("B")
private List<C> b;
...
}
如果有一个包含组件 A 的架构,其中包含带有两个项目的 AnyOf 部分。它们之间的区别在于,在一种情况下,子组件 C 是数组,而在另一种情况下,子组件 C 是对象,但它们具有相同的名称 B。如果我有两个 java 对象,是否可以用 jackson 处理它?
我在想如果我可以使用带有一些注释的接口,jackson 将确定正确的对象...
"A": {
"type": "object",
"anyOf": [
{
"properties": {
"B": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/components/schemas/C"
}
}
},
"additionalProperties": false
},
{
"properties": {
"B": {
"type": "object",
"$ref": "#/components/schemas/C"
}
},
"additionalProperties": false
}
]
}
假设我在 java
中有这个public class AAnyOf1 {
@JsonProperty("B")
private List<C> b = new ArrayList<>();
...
}
public class AAnyOf2 {
@JsonProperty("B")
private C b = null;
...
}
这是一种非常流行的模式,可以发送一个 JSON Object
作为响应,而不是 JSON Array
和一个 JSON Object
。所以,而不是:
{
"b": [
{
"id": 1
}
]
}
API
响应如下:
{
"b": {
"id": 1
}
}
Jackson
已经处理了这个用例。您需要启用 ACCEPT_SINGLE_VALUE_AS_ARRAY 功能并且您只需要一个版本的 POJO
:
class AAnyOf {
@JsonProperty("B")
private List<C> b;
...
}