修复必传属性重复解析问题 + 优化相同结构体未去重问题

This commit is contained in:
白茶清欢 2025-02-13 16:18:42 +08:00
parent bc5a8afd6c
commit 7307c85cfd
2 changed files with 20 additions and 6 deletions

View File

@ -276,6 +276,10 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
inputNameArr := strings.Split(inputType.Name(), ".")
inputName := inputNameArr[len(inputNameArr)-1]
schemaName := strings.ReplaceAll(pkgPath+"."+inputName, "/", "-")
if _, exist := g.docData.Components.Schemas[schemaName]; exist {
// 已存在, 无需重复生成
return schemaName
}
if _, exist := g.docData.Components.Schemas[schemaName]; !exist {
s := &define.Schema{
Nullable: false,
@ -322,10 +326,8 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
}
// g.docData.Components.Schemas[schemaName].Ref = consts.SwaggerDataTypeObject
for i := 0; i < inputType.NumField(); i++ {
if ValidateRule.IsRequired(inputType.Field(i)) {
// 必传字段
g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, ParseStructField.GetParamName(inputType.Field(i)))
}
// 设置参数各种属性
g.setStructFieldProperty(schemaName, inputType.Field(i))
if inputType.Field(i).Type.Kind() == reflect.Ptr ||
inputType.Field(i).Type.Kind() == reflect.Struct ||
@ -461,3 +463,15 @@ func (g *Generate) realType2SwaggerType(realType string) string {
}
return g.realBaseType2SwaggerType(realType)
}
// setStructFieldProperty 添加struct_field各种属性
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:13 2025/2/13
func (g *Generate) setStructFieldProperty(schemaName string, structField reflect.StructField) {
paramName := ParseStructField.GetParamName(structField)
if ValidateRule.IsRequired(structField) {
g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, paramName)
}
}

View File

@ -28,8 +28,8 @@ func Test_parser_Openapi3(t *testing.T) {
Age int `json:"age" d:"18" desc:"年龄" binding:"required"`
}
type List struct {
Total int64 `json:"total"`
UserList []User `json:"user_list" binding:"required"`
Total int64 `json:"total" binding:"required"`
UserList []User `json:"user_list"`
}
var l List
g := NewOpenapiDoc(nil, nil)