diff --git a/common.go b/common.go index 497c02d..ddd2043 100644 --- a/common.go +++ b/common.go @@ -85,3 +85,8 @@ func GetParamLocation(docParamLocation string) consts.RequestDataLocation { return consts.RequestDataLocationQuery } } + +// GetRealDefinitionsKey 统统schema下的 $ref 获取真实的 definitions key +func GetRealDefinitionsKey(ref string) string { + return strings.TrimPrefix(ref, "#/definitions/") +} diff --git a/swagger.go b/swagger.go index 325b499..897baa9 100644 --- a/swagger.go +++ b/swagger.go @@ -95,17 +95,39 @@ func buildSwagger2ParamConfig(swaggerDoc *define.Swagger, paramConfigList []*def res := make([]*define.ParamConfig, 0) // 解析参数 for _, paramConfig := range paramConfigList { - paramConfigBuildConfig := &define.ParamConfig{ - Location: GetParamLocation(paramConfig.In).String(), - Path: paramConfig.Name, - Type: GetParamType(paramConfig.Type, paramConfig.Format).String(), - Title: paramConfig.Name, - Description: paramConfig.Description, - Required: paramConfig.Required, + if paramConfig.Name != "body" { + paramConfigBuildConfig := &define.ParamConfig{ + Location: GetParamLocation(paramConfig.In).String(), + Path: paramConfig.Name, + Type: GetParamType(paramConfig.Type, paramConfig.Format).String(), + Title: paramConfig.Name, + Description: paramConfig.Description, + Required: paramConfig.Required, + } + res = append(res, paramConfigBuildConfig) } - res = append(res, paramConfigBuildConfig) - if nil != paramConfig.Schema && len(paramConfig.Schema.Ref) > 0 { - // TODO : 可以继续展开 + + if nil == paramConfig.Schema || len(paramConfig.Schema.Ref) == 0 { + continue + } + // 可以继续展开 + requiredTable := make(map[string]bool) + for _, paramName := range swaggerDoc.Definitions[GetRealDefinitionsKey(paramConfig.Schema.Ref)].Required { + requiredTable[paramName] = true + } + for paramName, paramMoreConfig := range swaggerDoc.Definitions[GetRealDefinitionsKey(paramConfig.Schema.Ref)].Properties { + if paramConfig.Name != "body" { + paramName = paramConfig.Name + "." + paramName + } + paramConfigBuildConfig := &define.ParamConfig{ + Location: GetParamLocation(paramConfig.In).String(), + Path: paramName, + Type: GetParamType(paramMoreConfig.Type, "").String(), + Title: paramMoreConfig.Description, + Description: paramMoreConfig.Description, + Required: requiredTable[paramName], + } + res = append(res, paramConfigBuildConfig) } }