【问题标题】:Jackson mapper. Could not resolve subtype of [simple type, class ]: missing type id property '' (for POJO property '')杰克逊映射器。无法解析 [简单类型,类 ] 的子类型:缺少类型 ID 属性 \'\'(对于 POJO 属性 \'\')
【发布时间】:2022-12-23 14:18:39
【问题描述】:

我正在使用 openapi 生成器来生成我的类

基类

@JsonPropertyOrder({
  EntityType.CONTAINER
})
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "...")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "structure_type", visible = true)
@JsonSubTypes({
  @JsonSubTypes.Type(value = SonClass1, name = "sonClass1"),
  @JsonSubTypes.Type(value = SonClass2, name = "sonClass2"),
})
public class MyBaseClass {
  public static final String JSON_PROPERTY_CONTAINER = "container";
  private String container;
}

SonClass1 示例

@JsonPropertyOrder({
  NodeType.JSON_PROPERTY_PROPERTIES,
})
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "...")
public class SonClass1 extends MyBaseClass {
  public static final String JSON_PROPERTY_PROPERTIES = "properties";
  private Map<String, Property> properties = null;
}

我正在尝试使用 ObjectMapper 使用 mapper.readValue(); 构建对象; 结果异常:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class com.MySon1]: missing type id property 'structure_type' 

你能解释一下为什么会这样吗,我能用这个做什么?这是否意味着我必须在每个子类上添加属性“structure_type”?

Openapi yaml 看起来像这样

MyBaseClass:
  type: object
  properties:
    container:
      type: string
  discriminator:
    propertyName: structure_type
    mapping:
      sonClass: '#/sonClass1'


sonClass1:
  allOf:
  - $ref: '#/MyBaseClass'
  - type: object
    properties:
      properties:
        type: object
        additionalProperties:
          $ref: '#/Property'

【问题讨论】:

    标签: java jackson mapping deserialization objectmapper


    【解决方案1】:

    我的基类应该有“structure_type”属性,在添加这个之后——一切正常。

    【讨论】:

      【解决方案2】:

      在我的例子中,json 字符串与 JAVA 对象类型不匹配。我更正了我的 json 字符串,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        相关资源
        最近更新 更多