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;

...

}