fix: header parameters
This commit is contained in:
parent
862371e153
commit
8f66ac9272
2
.gitignore
vendored
2
.gitignore
vendored
@ -16,3 +16,5 @@ Thumbs.db
|
||||
|
||||
#
|
||||
.swagger-codegen
|
||||
swagtest
|
||||
*.exe
|
@ -6,7 +6,6 @@ info(
|
||||
version: "type version here"
|
||||
)
|
||||
|
||||
|
||||
type (
|
||||
|
||||
//注册请求结构
|
||||
@ -19,6 +18,7 @@ type (
|
||||
LoginReq {
|
||||
Username string `json:"username"` //测试
|
||||
Password string `json:"password"` //测试2
|
||||
AppId string `header:"appId"` //APPID-TEST
|
||||
}
|
||||
UserInfoReq {
|
||||
Id string `path:"id"`
|
||||
|
@ -162,73 +162,13 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
|
||||
}
|
||||
if defineStruct, ok := route.RequestType.(spec.DefineStruct); ok {
|
||||
for _, member := range defineStruct.Members {
|
||||
if member.Name == "" {
|
||||
memberDefineStruct, _ := member.Type.(spec.DefineStruct)
|
||||
for _, m := range memberDefineStruct.Members {
|
||||
if strings.Contains(m.Tag, "header") {
|
||||
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
||||
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
||||
if !ok {
|
||||
ftype = tempKind.String()
|
||||
format = "UNKNOWN"
|
||||
}
|
||||
sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
|
||||
|
||||
for _, tag := range m.Tags() {
|
||||
sp.Name = tag.Name
|
||||
if len(tag.Options) == 0 {
|
||||
sp.Required = true
|
||||
continue
|
||||
}
|
||||
|
||||
required := true
|
||||
for _, option := range tag.Options {
|
||||
if strings.HasPrefix(option, optionsOption) {
|
||||
segs := strings.SplitN(option, equalToken, 2)
|
||||
if len(segs) == 2 {
|
||||
sp.Enum = strings.Split(segs[1], optionSeparator)
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, rangeOption) {
|
||||
segs := strings.SplitN(option, equalToken, 2)
|
||||
if len(segs) == 2 {
|
||||
min, max, ok := parseRangeOption(segs[1])
|
||||
if ok {
|
||||
sp.Schema.Minimum = min
|
||||
sp.Schema.Maximum = max
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, defaultOption) {
|
||||
segs := strings.Split(option, equalToken)
|
||||
if len(segs) == 2 {
|
||||
sp.Default = segs[1]
|
||||
}
|
||||
} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
|
||||
required = false
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, exampleOption) {
|
||||
segs := strings.Split(option, equalToken)
|
||||
if len(segs) == 2 {
|
||||
sp.Example = segs[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
sp.Required = required
|
||||
}
|
||||
sp.Description = strings.TrimLeft(m.Comment, "//")
|
||||
parameters = append(parameters, sp)
|
||||
}
|
||||
}
|
||||
continue
|
||||
if hasHeaderParameters(member) {
|
||||
parameters = parseHeader(member, parameters)
|
||||
}
|
||||
}
|
||||
if strings.ToUpper(route.Method) == http.MethodGet {
|
||||
for _, member := range defineStruct.Members {
|
||||
if strings.Contains(member.Tag, "path") {
|
||||
if hasPathParameters(member) || hasHeaderParameters(member) {
|
||||
continue
|
||||
}
|
||||
if embedStruct, isEmbed := member.Type.(spec.DefineStruct); isEmbed {
|
||||
@ -483,7 +423,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
|
||||
schema.Title = defineStruct.Name()
|
||||
|
||||
for _, member := range defineStruct.Members {
|
||||
if hasPathParameters(member) {
|
||||
if hasPathParameters(member) || hasHeaderParameters(member) {
|
||||
continue
|
||||
}
|
||||
kv := keyVal{Value: schemaOfField(member)}
|
||||
@ -494,8 +434,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
|
||||
if kv.Key == "" {
|
||||
memberStruct, _ := member.Type.(spec.DefineStruct)
|
||||
for _, m := range memberStruct.Members {
|
||||
|
||||
if strings.Contains(m.Tag, "header") {
|
||||
if hasHeaderParameters(m) || hasPathParameters(m) {
|
||||
continue
|
||||
}
|
||||
|
||||
@ -560,6 +499,15 @@ func hasPathParameters(member spec.Member) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func hasHeaderParameters(member spec.Member) bool {
|
||||
for _, tag := range member.Tags() {
|
||||
if tag.Key == "header" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func schemaOfField(member spec.Member) swaggerSchemaObject {
|
||||
ret := swaggerSchemaObject{}
|
||||
|
||||
@ -751,3 +699,73 @@ func contains(s []string, str string) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func parseHeader(m spec.Member, parameters []swaggerParameterObject) []swaggerParameterObject {
|
||||
|
||||
tempKind := swaggerMapTypes[strings.Replace(m.Type.Name(), "[]", "", -1)]
|
||||
ftype, format, ok := primitiveSchema(tempKind, m.Type.Name())
|
||||
if !ok {
|
||||
ftype = tempKind.String()
|
||||
format = "UNKNOWN"
|
||||
}
|
||||
sp := swaggerParameterObject{In: "header", Type: ftype, Format: format}
|
||||
|
||||
for _, tag := range m.Tags() {
|
||||
sp.Name = tag.Name
|
||||
if len(tag.Options) == 0 {
|
||||
sp.Required = true
|
||||
continue
|
||||
}
|
||||
|
||||
required := true
|
||||
for _, option := range tag.Options {
|
||||
if strings.HasPrefix(option, optionsOption) {
|
||||
segs := strings.SplitN(option, equalToken, 2)
|
||||
if len(segs) == 2 {
|
||||
sp.Enum = strings.Split(segs[1], optionSeparator)
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, rangeOption) {
|
||||
segs := strings.SplitN(option, equalToken, 2)
|
||||
if len(segs) == 2 {
|
||||
min, max, ok := parseRangeOption(segs[1])
|
||||
if ok {
|
||||
sp.Schema.Minimum = min
|
||||
sp.Schema.Maximum = max
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, defaultOption) {
|
||||
segs := strings.Split(option, equalToken)
|
||||
if len(segs) == 2 {
|
||||
sp.Default = segs[1]
|
||||
}
|
||||
} else if strings.HasPrefix(option, optionalOption) || strings.HasPrefix(option, omitemptyOption) {
|
||||
required = false
|
||||
}
|
||||
|
||||
if strings.HasPrefix(option, exampleOption) {
|
||||
segs := strings.Split(option, equalToken)
|
||||
if len(segs) == 2 {
|
||||
sp.Example = segs[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
sp.Required = required
|
||||
}
|
||||
sp.Description = strings.TrimLeft(m.Comment, "//")
|
||||
if m.Name == "" {
|
||||
memberDefineStruct, ok := m.Type.(spec.DefineStruct)
|
||||
if !ok {
|
||||
return parameters
|
||||
}
|
||||
for _, cm := range memberDefineStruct.Members {
|
||||
if hasHeaderParameters(cm) {
|
||||
parameters = parseHeader(cm, parameters)
|
||||
}
|
||||
}
|
||||
}
|
||||
return append(parameters, sp)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user