如何解决嵌套类的OpenAPI 3.0 Java注释
我正在尝试使组件在使用OpenAPI 3.0 Java批注时看起来嵌套在一起。但是,在另一个对象内引用的每个对象都将被创建为$ ref,而不是被构建为该字段节点。如何在没有$ ref的情况下将其嵌套?
例如:
public class User{
int id;
String name;
ContactInfo contactInfo;
}
public class ContactInfo{
String email;
String phone;
}
为
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
contact_info:
# The value of this property is an object
type: object
properties:
email:
type: string
format: email
phone:
type: string
代替
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
contactInfo: {
$ref: "#/components/schemas/ContactInfo"
}
ContactInfo:
type: object
properties:
email:
type: string
format: email
phone:
type: string
解决方法
所有复杂对象都是使用springdoc-openapi生成的,使用$ ref对象进行重用。
默认情况下,此行为来自swagger-core库,用于解析嵌套对象。
这就是说,您可以使用OpenApiCustomiser和swagger类的组合以编程方式定义属性以获得所需的结果:
@Component
public class MyOpenApiCustomiser extends SpecFilter implements OpenApiCustomiser {
@Override
public void customise(OpenAPI openApi) {
ResolvedSchema resolvedUserSchema = ModelConverters.getInstance()
.resolveAsResolvedSchema(new AnnotatedType(User.class));
resolvedUserSchema.schema
.addProperties("contactInfo",new ObjectSchema()
.addProperties("email",new StringSchema().format("email"))
.addProperties("phone",new StringSchema()));
openApi.schema(resolvedUserSchema.schema.getName(),resolvedUserSchema.schema);
this.removeBrokenReferenceDefinitions(openApi);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。