我有一个 FormTemplateElement 类,它有几个子类型。我希望仅使用 @Schema 注释来生成模式。然而 Swagger 也在解析 Jackson 注释。有没有办法防止这种情况发生?
我想使用 Jackson 注释进行序列化和反序列化目的,这就是为什么我无法删除它。
我正在使用 SpringDoc 版本 2.3.0 和 Jackson 版本2.16.0。
@Schema(
discriminatorProperty = "formTemplateElementType",
name = "FormTemplateElement",
discriminatorMapping = {
@DiscriminatorMapping(value = "ShortTextFormElement", schema = ShortTextFormElement.class),
@DiscriminatorMapping(value = "LongTextFormElement", schema = LongTextFormElement.class),
},
subTypes = {
ShortTextFormElement.class,
LongTextFormElement.class,
}
)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "formTemplateElementType",
visible = false
)
@JsonSubTypes(
{
@JsonSubTypes.Type(value = ShortTextFormElement.class),
@JsonSubTypes.Type(value = LongTextFormElement.class),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class FormTemplateElement {
@NotEmpty
UUID id;
@NotEmpty
FormTemplateElementType formTemplateElementType;
@NotEmpty
Boolean isRequired;
@NotEmpty
Boolean isHidden;
}
我想要解决方案的主要原因是我使用 OAS3 进行代码生成。 事实证明,在我的用例中使用 @JsonSubtypes 很难实现多态性(我正在使用 open-api cli 生成器来获取打字稿)。 我做了一个解决方法,当我使用 cli 生成代码时使用 @Schema 注释,而当我实际运行 Spring Boot 后端时使用 @JsonSubType。