diff --git a/tools/goctl/.gitignore b/tools/goctl/.gitignore
new file mode 100644
index 000000000..53c37a166
--- /dev/null
+++ b/tools/goctl/.gitignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/tools/goctl/api/cmd.go b/tools/goctl/api/cmd.go
index c1ec4f4d2..8405bc83a 100644
--- a/tools/goctl/api/cmd.go
+++ b/tools/goctl/api/cmd.go
@@ -77,6 +77,7 @@ func init() {
goCmdFlags.StringVar(&gogen.VarStringRemote, "remote")
goCmdFlags.StringVar(&gogen.VarStringBranch, "branch")
goCmdFlags.BoolVar(&gogen.VarBoolWithTest, "test")
+ goCmdFlags.BoolVar(&gogen.VarBoolTypeGroup, "type-group")
goCmdFlags.StringVarWithDefaultValue(&gogen.VarStringStyle, "style", config.DefaultFormat)
javaCmdFlags.StringVar(&javagen.VarStringDir, "dir")
diff --git a/tools/goctl/api/gogen/gen.go b/tools/goctl/api/gogen/gen.go
index 676cfc376..9c1bb7b18 100644
--- a/tools/goctl/api/gogen/gen.go
+++ b/tools/goctl/api/gogen/gen.go
@@ -40,6 +40,8 @@ var (
// VarStringStyle describes the style of output files.
VarStringStyle string
VarBoolWithTest bool
+ // VarBoolTypeGroup describes whether to group types.
+ VarBoolTypeGroup bool
)
// GoCommand gen go project files from command line
diff --git a/tools/goctl/api/gogen/gentypes.go b/tools/goctl/api/gogen/gentypes.go
index 89f3295d0..80d78e51b 100644
--- a/tools/goctl/api/gogen/gentypes.go
+++ b/tools/goctl/api/gogen/gentypes.go
@@ -9,11 +9,11 @@ import (
"sort"
"strings"
+ "github.com/zeromicro/go-zero/core/collection"
"github.com/zeromicro/go-zero/tools/goctl/api/spec"
apiutil "github.com/zeromicro/go-zero/tools/goctl/api/util"
"github.com/zeromicro/go-zero/tools/goctl/config"
"github.com/zeromicro/go-zero/tools/goctl/internal/version"
- "github.com/zeromicro/go-zero/tools/goctl/pkg/env"
"github.com/zeromicro/go-zero/tools/goctl/util"
"github.com/zeromicro/go-zero/tools/goctl/util/format"
)
@@ -41,53 +41,116 @@ func BuildTypes(types []spec.Type) (string, error) {
return builder.String(), nil
}
-func removeTypeFromDefault(tp spec.Type, group string, groupTypes map[string]map[string]spec.Type) map[string]map[string]spec.Type {
+func getTypeName(tp spec.Type) string {
+ if tp == nil {
+ return ""
+ }
switch val := tp.(type) {
case spec.DefineStruct:
typeName := util.Title(tp.Name())
- defaultGroups, ok := groupTypes[groupTypeDefault]
- if ok {
- delete(defaultGroups, typeName)
- types, ok := groupTypes[group]
- if !ok {
- types = make(map[string]spec.Type)
- }
- types[typeName] = tp
- groupTypes[group] = types
- }
- groupTypes[groupTypeDefault] = defaultGroups
+ return typeName
case spec.PointerType:
- groupTypes = removeTypeFromDefault(val.Type, group, groupTypes)
+ return getTypeName(val.Type)
case spec.ArrayType:
- groupTypes = removeTypeFromDefault(val.Value, group, groupTypes)
+ return getTypeName(val.Value)
}
- return groupTypes
+ return ""
}
func genTypesWithGroup(dir string, cfg *config.Config, api *spec.ApiSpec) error {
groupTypes := make(map[string]map[string]spec.Type)
- for _, v := range api.Types {
- types, ok := groupTypes[groupTypeDefault]
- if !ok {
- types = make(map[string]spec.Type)
- }
- types[util.Title(v.Name())] = v
- groupTypes[groupTypeDefault] = types
- }
+ typesBelongToFiles := make(map[string]*collection.Set)
for _, v := range api.Service.Groups {
group := v.GetAnnotation(groupProperty)
if len(group) == 0 {
+ group = groupTypeDefault
+ }
+ // convert filepath to Identifier name spec.
+ group = strings.TrimPrefix(group, "/")
+ group = strings.TrimSuffix(group, "/")
+ group = util.SafeString(group)
+ for _, v := range v.Routes {
+ requestTypeName := getTypeName(v.RequestType)
+ responseTypeName := getTypeName(v.ResponseType)
+ requestTypeFileSet, ok := typesBelongToFiles[requestTypeName]
+ if !ok {
+ requestTypeFileSet = collection.NewSet()
+ }
+ if len(requestTypeName) > 0 {
+ requestTypeFileSet.AddStr(group)
+ typesBelongToFiles[requestTypeName] = requestTypeFileSet
+ }
+
+ responseTypeFileSet, ok := typesBelongToFiles[responseTypeName]
+ if !ok {
+ responseTypeFileSet = collection.NewSet()
+ }
+ if len(responseTypeName) > 0 {
+ responseTypeFileSet.AddStr(group)
+ typesBelongToFiles[responseTypeName] = responseTypeFileSet
+ }
+ }
+ }
+
+ typesInOneFile := make(map[string]*collection.Set)
+ for typeName, fileSet := range typesBelongToFiles {
+ count := fileSet.Count()
+ switch {
+ case count == 0: // it means there has no structure type or no request/response body
+ continue
+ case count == 1: // it means a structure type used in only one group.
+ groupName := fileSet.KeysStr()[0]
+ typeSet, ok := typesInOneFile[groupName]
+ if !ok {
+ typeSet = collection.NewSet()
+ }
+ typeSet.AddStr(typeName)
+ typesInOneFile[groupName] = typeSet
+ default: // it means this type is used in multiple groups.
continue
}
- for _, v := range v.Routes {
- if v.RequestType != nil {
- groupTypes = removeTypeFromDefault(v.RequestType, group, groupTypes)
- }
- if v.ResponseType != nil {
- groupTypes = removeTypeFromDefault(v.ResponseType, group, groupTypes)
- }
+ }
+
+ for _, v := range api.Types {
+ typeName := util.Title(v.Name())
+ groupSet, ok := typesBelongToFiles[typeName]
+ var typeCount int
+ if !ok {
+ typeCount = 0
+ } else {
+ typeCount = groupSet.Count()
}
+
+ if typeCount == 0 { // not belong to any group
+ types, ok := groupTypes[groupTypeDefault]
+ if !ok {
+ types = make(map[string]spec.Type)
+ }
+ types[typeName] = v
+ groupTypes[groupTypeDefault] = types
+ continue
+ }
+
+ if typeCount == 1 { // belong to one group
+ groupName := groupSet.KeysStr()[0]
+ types, ok := groupTypes[groupName]
+ if !ok {
+ types = make(map[string]spec.Type)
+ }
+ types[typeName] = v
+ groupTypes[groupName] = types
+ continue
+ }
+
+ // belong to multiple groups
+ types, ok := groupTypes[groupTypeDefault]
+ if !ok {
+ types = make(map[string]spec.Type)
+ }
+ types[typeName] = v
+ groupTypes[groupTypeDefault] = types
+
}
for group, typeGroup := range groupTypes {
@@ -142,7 +205,7 @@ func writeTypes(dir, baseFilename string, cfg *config.Config, types []spec.Type)
}
func genTypes(dir string, cfg *config.Config, api *spec.ApiSpec) error {
- if env.UseExperimental() {
+ if VarBoolTypeGroup {
return genTypesWithGroup(dir, cfg, api)
}
return writeTypes(dir, typesFile, cfg, api.Types)
diff --git a/tools/goctl/api/swagger/annotation.go b/tools/goctl/api/swagger/annotation.go
index fe3d9f799..ad85f18b2 100644
--- a/tools/goctl/api/swagger/annotation.go
+++ b/tools/goctl/api/swagger/annotation.go
@@ -7,15 +7,6 @@ import (
"google.golang.org/grpc/metadata"
)
-func hasKey(properties map[string]string, key string) bool {
- if len(properties) == 0 {
- return false
- }
- md := metadata.New(properties)
- _, ok := md[key]
- return ok
-}
-
func getBoolFromKVOrDefault(properties map[string]string, key string, def bool) bool {
if len(properties) == 0 {
return def
diff --git a/tools/goctl/api/swagger/annotation_test.go b/tools/goctl/api/swagger/annotation_test.go
index 9278bfdb0..872d65640 100644
--- a/tools/goctl/api/swagger/annotation_test.go
+++ b/tools/goctl/api/swagger/annotation_test.go
@@ -42,7 +42,7 @@ func Test_getListFromInfoOrDefault(t *testing.T) {
"empty": `""`,
}
- assert.Equal(t, []string{"a", "b", "c"}, getListFromInfoOrDefault(properties, "list", []string{"default"}))
+ assert.Equal(t, []string{"a", " b", " c"}, getListFromInfoOrDefault(properties, "list", []string{"default"}))
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(properties, "empty", []string{"default"}))
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(properties, "missing", []string{"default"}))
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(nil, "nil", []string{"default"}))
diff --git a/tools/goctl/api/swagger/command.go b/tools/goctl/api/swagger/command.go
index 47c3658da..3a50e25a2 100644
--- a/tools/goctl/api/swagger/command.go
+++ b/tools/goctl/api/swagger/command.go
@@ -8,10 +8,9 @@ import (
"strings"
"github.com/spf13/cobra"
- "gopkg.in/yaml.v2"
-
"github.com/zeromicro/go-zero/tools/goctl/pkg/parser/api/parser"
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
+ "gopkg.in/yaml.v2"
)
var (
diff --git a/tools/goctl/api/swagger/const.go b/tools/goctl/api/swagger/const.go
index 1f2d94c7c..87ea53bfb 100644
--- a/tools/goctl/api/swagger/const.go
+++ b/tools/goctl/api/swagger/const.go
@@ -1,14 +1,15 @@
package swagger
const (
- tagHeader = "header"
- tagPath = "path"
- tagForm = "form"
- tagJson = "json"
- defFlag = "default="
- enumFlag = "options="
- rangeFlag = "range="
- exampleFlag = "example="
+ tagHeader = "header"
+ tagPath = "path"
+ tagForm = "form"
+ tagJson = "json"
+ defFlag = "default="
+ enumFlag = "options="
+ rangeFlag = "range="
+ exampleFlag = "example="
+ optionalFlag = "optional"
paramsInHeader = "header"
paramsInPath = "path"
@@ -27,6 +28,36 @@ const (
applicationJson = "application/json"
applicationForm = "application/x-www-form-urlencoded"
schemeHttps = "https"
- defaultHost = "127.0.0.1"
defaultBasePath = "/"
)
+
+const (
+ propertyKeyUseDefinitions = "useDefinitions"
+ propertyKeyExternalDocsDescription = "externalDocsDescription"
+ propertyKeyExternalDocsURL = "externalDocsURL"
+ propertyKeyTitle = "title"
+ propertyKeyTermsOfService = "termsOfService"
+ propertyKeyDescription = "description"
+ propertyKeyVersion = "version"
+ propertyKeyContactName = "contactName"
+ propertyKeyContactURL = "contactURL"
+ propertyKeyContactEmail = "contactEmail"
+ propertyKeyLicenseName = "licenseName"
+ propertyKeyLicenseURL = "licenseURL"
+ propertyKeyProduces = "produces"
+ propertyKeyConsumes = "consumes"
+ propertyKeySchemes = "schemes"
+ propertyKeyTags = "tags"
+ propertyKeySummary = "summary"
+ propertyKeyDeprecated = "deprecated"
+ propertyKeyPrefix = "prefix"
+ propertyKeyAuthType = "authType"
+ propertyKeyHost = "host"
+ propertyKeyBasePath = "basePath"
+ propertyKeyWrapCodeMsg = "wrapCodeMsg"
+ propertyKeyBizCodeEnumDescription = "bizCodeEnumDescription"
+)
+
+const (
+ defaultValueOfPropertyUseDefinition = false
+)
diff --git a/tools/goctl/api/swagger/contenttype.go b/tools/goctl/api/swagger/contenttype.go
index ca0574108..f711a1adc 100644
--- a/tools/goctl/api/swagger/contenttype.go
+++ b/tools/goctl/api/swagger/contenttype.go
@@ -7,7 +7,7 @@ import (
"github.com/zeromicro/go-zero/tools/goctl/api/spec"
)
-func consumesFromTypeOrDef(method string, tp spec.Type) []string {
+func consumesFromTypeOrDef(ctx Context, method string, tp spec.Type) []string {
if strings.EqualFold(method, http.MethodGet) {
return []string{}
}
@@ -18,7 +18,7 @@ func consumesFromTypeOrDef(method string, tp spec.Type) []string {
if !ok {
return []string{}
}
- if typeContainsTag(structType, tagJson) {
+ if typeContainsTag(ctx, structType, tagJson) {
return []string{applicationJson}
}
return []string{applicationForm}
diff --git a/tools/goctl/api/swagger/contenttype_test.go b/tools/goctl/api/swagger/contenttype_test.go
index 3cc08342c..7d9586fc2 100644
--- a/tools/goctl/api/swagger/contenttype_test.go
+++ b/tools/goctl/api/swagger/contenttype_test.go
@@ -61,7 +61,7 @@ func TestConsumesFromTypeOrDef(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- result := consumesFromTypeOrDef(tt.method, tt.tp)
+ result := consumesFromTypeOrDef(testingContext(t), tt.method, tt.tp)
assert.Equal(t, tt.expected, result)
})
}
diff --git a/tools/goctl/api/swagger/context.go b/tools/goctl/api/swagger/context.go
new file mode 100644
index 000000000..a1ae909b7
--- /dev/null
+++ b/tools/goctl/api/swagger/context.go
@@ -0,0 +1,28 @@
+package swagger
+
+import (
+ "testing"
+
+ "github.com/zeromicro/go-zero/tools/goctl/api/spec"
+)
+
+type Context struct {
+ UseDefinitions bool
+ WrapCodeMsg bool
+ BizCodeEnumDescription string
+}
+
+func testingContext(_ *testing.T) Context {
+ return Context{}
+}
+
+func contextFromApi(info spec.Info) Context {
+ if len(info.Properties) == 0 {
+ return Context{}
+ }
+ return Context{
+ UseDefinitions: getBoolFromKVOrDefault(info.Properties, propertyKeyUseDefinitions, defaultValueOfPropertyUseDefinition),
+ WrapCodeMsg: getBoolFromKVOrDefault(info.Properties, propertyKeyWrapCodeMsg, false),
+ BizCodeEnumDescription: getStringFromKVOrDefault(info.Properties, propertyKeyBizCodeEnumDescription, "business code"),
+ }
+}
diff --git a/tools/goctl/api/swagger/definition.go b/tools/goctl/api/swagger/definition.go
new file mode 100644
index 000000000..c705aba13
--- /dev/null
+++ b/tools/goctl/api/swagger/definition.go
@@ -0,0 +1,32 @@
+package swagger
+
+import (
+ "github.com/go-openapi/spec"
+ apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
+)
+
+func definitionsFromTypes(ctx Context, types []apiSpec.Type) spec.Definitions {
+ if !ctx.UseDefinitions {
+ return nil
+ }
+ definitions := make(spec.Definitions)
+ for _, tp := range types {
+ typeName := tp.Name()
+ definitions[typeName] = schemaFromType(ctx, tp)
+ }
+ return definitions
+}
+
+func schemaFromType(ctx Context, tp apiSpec.Type) spec.Schema {
+ p, r := propertiesFromType(ctx, tp)
+ props := spec.SchemaProps{
+ Type: typeFromGoType(ctx, tp),
+ Properties: p,
+ AdditionalProperties: mapFromGoType(ctx, tp),
+ Items: itemsFromGoType(ctx, tp),
+ Required: r,
+ }
+ return spec.Schema{
+ SchemaProps: props,
+ }
+}
diff --git a/tools/goctl/api/swagger/example/example.api b/tools/goctl/api/swagger/example/example.api
index 383155677..6ac453483 100644
--- a/tools/goctl/api/swagger/example/example.api
+++ b/tools/goctl/api/swagger/example/example.api
@@ -12,15 +12,16 @@ info (
licenseURL: "https://github.com/zeromicro/go-zero" // licenseURL corresponding to Swagger
consumes: "application/json" // consumes corresponding to Swagger,default value is `application/json`
produces: "application/json" // produces corresponding to Swagger,default value is `application/json`
- schemes: "https" // schemes corresponding to Swagger,default value is `https``
+ schemes: "http,https" // schemes corresponding to Swagger,default value is `https``
host: "example.com" // host corresponding to Swagger,default value is `127.0.0.1`
basePath: "/v1" // basePath corresponding to Swagger,default value is `/`
- wrapCodeMsg: "true" // to wrap in the universal code-msg structure, like {"code":0,"msg":"OK","data":$data}
+ wrapCodeMsg: true // to wrap in the universal code-msg structure, like {"code":0,"msg":"OK","data":$data}
bizCodeEnumDescription: "1001-User not login
1002-User permission denied" // enums of business error codes, in JSON format, with the key being the business error code and the value being the description of that error code. This only takes effect when wrapCodeMsg is set to true.
// securityDefinitionsFromJson is a custom authentication configuration, and the JSON content will be directly inserted into the securityDefinitions of Swagger.
// Format reference: https://swagger.io/specification/v2/#security-definitions-object
// You can declare authType in the @server of the API to specify the authentication type used for its routes.
securityDefinitionsFromJson: `{"apiKey":{"description":"apiKey type description","type":"apiKey","name":"x-api-key","in":"header"}}`
+ useDefinitions: true // if set true, the definitions will be generated in the swagger.json for response body or json request body file, and the models will be referenced in the API.
)
type (
diff --git a/tools/goctl/api/swagger/example/example.swagger.json b/tools/goctl/api/swagger/example/example.swagger.json
new file mode 100644
index 000000000..dd494fa21
--- /dev/null
+++ b/tools/goctl/api/swagger/example/example.swagger.json
@@ -0,0 +1,4980 @@
+{
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "swagger": "2.0",
+ "info": {
+ "description": "Generating Swagger files using the API demo.",
+ "title": "Demo API",
+ "termsOfService": "https://github.com/zeromicro/go-zero",
+ "contact": {
+ "name": "keson.an",
+ "url": "https://github.com/zeromicro/go-zero",
+ "email": "example@gmail.com"
+ },
+ "license": {
+ "name": "MIT",
+ "url": "https://github.com/zeromicro/go-zero"
+ },
+ "version": "v1"
+ },
+ "host": "example.com",
+ "basePath": "/v1",
+ "paths": {
+ "/form": {
+ "post": {
+ "description": "form demo",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "form"
+ ],
+ "summary": "form",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "formData",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "formData",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-User not login\u003cbr\u003e1002-User permission denied",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/FormResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/json/complex": {
+ "post": {
+ "description": "complex json request body API",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "postJson"
+ ],
+ "summary": "jsonComplex",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-User not login\u003cbr\u003e1002-User permission denied",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/ComplexJsonResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/json/simple": {
+ "post": {
+ "description": "simple json request body API",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "postJson"
+ ],
+ "summary": "jsonSimple",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string",
+ "default": "male",
+ "enum": [
+ "male",
+ "female"
+ ],
+ "example": "male"
+ },
+ "id": {
+ "type": "integer",
+ "maximum": 10000,
+ "minimum": 1,
+ "example": 10
+ },
+ "language": {
+ "type": "string",
+ "enum": [
+ "golang",
+ "java",
+ "python",
+ "typescript",
+ "rust"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-User not login\u003cbr\u003e1002-User permission denied",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/JsonResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/query": {
+ "get": {
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "description": "query demo",
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "query"
+ ],
+ "summary": "query",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "avatar",
+ "in": "query",
+ "allowEmptyValue": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-User not login\u003cbr\u003e1002-User permission denied",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/QueryResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/query/{id}": {
+ "get": {
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "description": "show path query demo",
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "query"
+ ],
+ "summary": "queryPath",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-User not login\u003cbr\u003e1002-User permission denied",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/PathQueryResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "ComplexJsonLevel1": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonLevel2": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonReq": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonResp": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "FormReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "FormResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "JsonReq": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string",
+ "default": "male",
+ "enum": [
+ "male",
+ "female"
+ ],
+ "example": "male"
+ },
+ "id": {
+ "type": "integer",
+ "maximum": 10000,
+ "minimum": 1,
+ "example": 10
+ },
+ "language": {
+ "type": "string",
+ "enum": [
+ "golang",
+ "java",
+ "python",
+ "typescript",
+ "rust"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "JsonResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "avatar",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "language": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "PathQueryReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "PathQueryResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "QueryReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Avatar": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "QueryResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ }
+ },
+ "securityDefinitions": {
+ "apiKey": {
+ "description": "apiKey type description",
+ "type": "apiKey",
+ "name": "x-api-key",
+ "in": "header"
+ }
+ },
+ "x-date": "2025-05-10 21:16:52",
+ "x-description": "This is a goctl generated swagger file.",
+ "x-github": "https://github.com/zeromicro/go-zero",
+ "x-go-zero-doc": "https://go-zero.dev/",
+ "x-goctl-version": "1.8.4-alpha"
+}
\ No newline at end of file
diff --git a/tools/goctl/api/swagger/example/example_cn.api b/tools/goctl/api/swagger/example/example_cn.api
index 602f60e0d..f7e632b85 100644
--- a/tools/goctl/api/swagger/example/example_cn.api
+++ b/tools/goctl/api/swagger/example/example_cn.api
@@ -12,15 +12,16 @@ info (
licenseURL: "https://github.com/zeromicro/go-zero" // 对应 swagger 的 licenseURL
consumes: "application/json" // 对应 swagger 的 consumes,不填默认为 application/json
produces: "application/json" // 对应 swagger 的 produces,不填默认为 application/json
- schemes: "https" // 对应 swagger 的 schemes,不填默认为 https
+ schemes: "http,https" // 对应 swagger 的 schemes,不填默认为 https
host: "example.com" // 对应 swagger 的 host,不填默认为 127.0.0.1
basePath: "/v1" // 对应 swagger 的 basePath,不填默认为 /
- wrapCodeMsg: "true" // 是否用 code-msg 通用响应体,如果开启,则以格式 {"code":0,"msg":"OK","data":$data} 包括响应体
+ wrapCodeMsg: true // 是否用 code-msg 通用响应体,如果开启,则以格式 {"code":0,"msg":"OK","data":$data} 包括响应体
bizCodeEnumDescription: "1001-未登录
1002-无权限操作" // 全局业务错误码枚举描述,json 格式,key 为业务错误码,value 为该错误码的描述,仅当 wrapCodeMsg 为 true 时生效
// securityDefinitionsFromJson 为自定义鉴权配置,json 内容将直接放入 swagger 的 securityDefinitions 中,
// 格式参考 https://swagger.io/specification/v2/#security-definitions-object
// 在 api 的 @server 中可声明 authType 来指定其路由使用的鉴权类型
securityDefinitionsFromJson: `{"apiKey":{"description":"apiKey 类型鉴权自定义","type":"apiKey","name":"x-api-key","in":"header"}}`
+ useDefinitions: true// 开启声明将生成models 进行关联,definitions 仅对响应体和 json 请求体生效
)
type (
@@ -52,7 +53,7 @@ type (
service Swagger {
@doc (
description: "query 接口"
- bizCodeEnumDescription: " 1003-用不存在
1004-非法操作" // 接口级别业务错误码枚举描述,会覆盖全局的业务错误码,json 格式,key 为业务错误码,value 为该错误码的描述,仅当 wrapCodeMsg 为 true 时生效
+ bizCodeEnumDescription: " 1003-用不存在
1004-非法操作" // 接口级别业务错误码枚举描述,会覆盖全局的业务错误码,json 格式,key 为业务错误码,value 为该错误码的描述,仅当 wrapCodeMsg 为 true 且 useDefinitions 为 false 时生效
)
@handler query
get /query (QueryReq) returns (QueryResp)
diff --git a/tools/goctl/api/swagger/example/example_cn.swagger.json b/tools/goctl/api/swagger/example/example_cn.swagger.json
new file mode 100644
index 000000000..0d949a9e0
--- /dev/null
+++ b/tools/goctl/api/swagger/example/example_cn.swagger.json
@@ -0,0 +1,5608 @@
+{
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "swagger": "2.0",
+ "info": {
+ "description": "演示 api 生成 swagger 文件的 api 完整写法",
+ "title": "演示 API",
+ "termsOfService": "https://github.com/zeromicro/go-zero",
+ "contact": {
+ "name": "keson.an",
+ "url": "https://github.com/zeromicro/go-zero",
+ "email": "example@gmail.com"
+ },
+ "license": {
+ "name": "MIT",
+ "url": "https://github.com/zeromicro/go-zero"
+ },
+ "version": "v1"
+ },
+ "host": "example.com",
+ "basePath": "/v1",
+ "paths": {
+ "/form": {
+ "post": {
+ "description": "form 接口",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "form 表单 api 演示"
+ ],
+ "summary": "form",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "formData",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "formData",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-未登录\u003cbr\u003e1002-无权限操作",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/FormResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/json/complex": {
+ "post": {
+ "description": "复杂的 json 请求体接口",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "post json api 演示"
+ ],
+ "summary": "jsonComplex",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "mapMapObject",
+ "mapMapPointerObject",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapMapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-未登录\u003cbr\u003e1002-无权限操作",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/ComplexJsonResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/json/simple": {
+ "post": {
+ "description": "简单的 json 请求体接口",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "post json api 演示"
+ ],
+ "summary": "jsonSimple",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string",
+ "default": "male",
+ "enum": [
+ "male",
+ "female"
+ ],
+ "example": "male"
+ },
+ "id": {
+ "type": "integer",
+ "maximum": 10000,
+ "minimum": 1,
+ "example": 10
+ },
+ "language": {
+ "type": "string",
+ "enum": [
+ "golang",
+ "java",
+ "python",
+ "typescript",
+ "rust"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-未登录\u003cbr\u003e1002-无权限操作",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/JsonResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/query": {
+ "get": {
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "description": "query 接口",
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "query 演示"
+ ],
+ "summary": "query",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "avatar",
+ "in": "query",
+ "allowEmptyValue": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": " 1003-用不存在\u003cbr\u003e1004-非法操作",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/QueryResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/query/{id}": {
+ "get": {
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "description": "query path 中包含 id 字段接口",
+ "produces": [
+ "application/json"
+ ],
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "query 演示"
+ ],
+ "summary": "queryPath",
+ "parameters": [
+ {
+ "maximum": 10000,
+ "minimum": 1,
+ "type": "integer",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "in": "query",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "1001-未登录\u003cbr\u003e1002-无权限操作",
+ "type": "integer",
+ "example": 0
+ },
+ "data": {
+ "$ref": "#/definitions/PathQueryResp"
+ },
+ "msg": {
+ "description": "business message",
+ "type": "string",
+ "example": "ok"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "ComplexJsonLevel1": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonLevel2": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonReq": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "mapMapObject",
+ "mapMapPointerObject",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapMapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "ComplexJsonResp": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "arrayInteger",
+ "arrayNumber",
+ "arrayBoolean",
+ "arrayString",
+ "arrayArrayInteger",
+ "arrayArrayNumber",
+ "arrayArrayBoolean",
+ "arrayArrayString",
+ "mapInteger",
+ "mapNumber",
+ "mapBoolean",
+ "mapString",
+ "mapArrayInteger",
+ "mapArrayNumber",
+ "mapArrayBoolean",
+ "mapArrayString",
+ "mapMapInteger",
+ "mapMapNumber",
+ "mapMapBoolean",
+ "mapMapString",
+ "mapMapObject",
+ "mapMapPointerObject",
+ "object",
+ "pointerObject",
+ "arrayObject",
+ "arrayPointerObject",
+ "mapObject",
+ "mapPointerObject",
+ "arrayArrayObject",
+ "arrayArrayPointerObject",
+ "arrayMapObject",
+ "arrayMapPointerObject",
+ "mapArrayObject",
+ "mapArrayPointerObject"
+ ],
+ "properties": {
+ "arrayArrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "arrayArrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "arrayArrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "arrayArrayObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayArrayString": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "arrayBoolean": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ },
+ "arrayInteger": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "arrayMapObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayMapPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayNumber": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "arrayObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayPointerObject": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "arrayString": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "mapArrayBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapArrayInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapArrayNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "mapArrayObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapArrayString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "mapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "mapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "mapMapBoolean": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ }
+ },
+ "mapMapInteger": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer"
+ }
+ }
+ },
+ "mapMapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ }
+ },
+ "mapMapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapMapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapMapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "mapNumber": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "number"
+ }
+ },
+ "mapObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapPointerObject": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "mapString": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string",
+ "object",
+ "pointerObject"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "object": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "pointerObject": {
+ "type": "object",
+ "required": [
+ "integer",
+ "number",
+ "boolean",
+ "string"
+ ],
+ "properties": {
+ "boolean": {
+ "type": "boolean",
+ "enum": [
+ "true",
+ "false"
+ ],
+ "example": true
+ },
+ "integer": {
+ "type": "integer",
+ "example": 1
+ },
+ "number": {
+ "type": "number",
+ "example": 1.1
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel2"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ },
+ "$ref": "#/definitions/ComplexJsonLevel1"
+ },
+ "string": {
+ "type": "string",
+ "example": "some text"
+ }
+ }
+ },
+ "FormReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "FormResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "JsonReq": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string",
+ "default": "male",
+ "enum": [
+ "male",
+ "female"
+ ],
+ "example": "male"
+ },
+ "id": {
+ "type": "integer",
+ "maximum": 10000,
+ "minimum": 1,
+ "example": 10
+ },
+ "language": {
+ "type": "string",
+ "enum": [
+ "golang",
+ "java",
+ "python",
+ "typescript",
+ "rust"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "JsonResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "avatar",
+ "language",
+ "gender"
+ ],
+ "properties": {
+ "avatar": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "language": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "PathQueryReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "PathQueryResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ },
+ "QueryReq": {
+ "type": "object",
+ "required": [
+ "Id",
+ "Name"
+ ],
+ "properties": {
+ "Avatar": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "integer"
+ },
+ "Name": {
+ "type": "string"
+ }
+ }
+ },
+ "QueryResp": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "example": 10
+ },
+ "name": {
+ "type": "string",
+ "example": "keson.an"
+ }
+ }
+ }
+ },
+ "securityDefinitions": {
+ "apiKey": {
+ "description": "apiKey 类型鉴权自定义",
+ "type": "apiKey",
+ "name": "x-api-key",
+ "in": "header"
+ }
+ },
+ "x-date": "2025-05-10 21:16:19",
+ "x-description": "This is a goctl generated swagger file.",
+ "x-github": "https://github.com/zeromicro/go-zero",
+ "x-go-zero-doc": "https://go-zero.dev/",
+ "x-goctl-version": "1.8.4-alpha"
+}
\ No newline at end of file
diff --git a/tools/goctl/api/swagger/options.go b/tools/goctl/api/swagger/options.go
index ead7069ab..a2a35fa4d 100644
--- a/tools/goctl/api/swagger/options.go
+++ b/tools/goctl/api/swagger/options.go
@@ -81,21 +81,21 @@ func enumsValueFromOptions(options []string) []any {
return []any{}
}
-func defValueFromOptions(options []string, apiType spec.Type) any {
- tp := sampleTypeFromGoType(apiType)
- return valueFromOptions(options, defFlag, tp)
+func defValueFromOptions(ctx Context, options []string, apiType spec.Type) any {
+ tp := sampleTypeFromGoType(ctx, apiType)
+ return valueFromOptions(ctx, options, defFlag, tp)
}
-func exampleValueFromOptions(options []string, apiType spec.Type) any {
- tp := sampleTypeFromGoType(apiType)
- val := valueFromOptions(options, exampleFlag, tp)
+func exampleValueFromOptions(ctx Context, options []string, apiType spec.Type) any {
+ tp := sampleTypeFromGoType(ctx, apiType)
+ val := valueFromOptions(ctx, options, exampleFlag, tp)
if val != nil {
return val
}
- return defValueFromOptions(options, apiType)
+ return defValueFromOptions(ctx, options, apiType)
}
-func valueFromOptions(options []string, key string, tp string) any {
+func valueFromOptions(_ Context, options []string, key string, tp string) any {
if len(options) == 0 {
return nil
}
@@ -103,16 +103,18 @@ func valueFromOptions(options []string, key string, tp string) any {
if strings.HasPrefix(option, key) {
s := option[len(key):]
switch tp {
- case "integer":
+ case swaggerTypeInteger:
val, _ := strconv.ParseInt(s, 10, 64)
return val
- case "boolean":
+ case swaggerTypeBoolean:
val, _ := strconv.ParseBool(s)
return val
- case "number":
+ case swaggerTypeNumber:
val, _ := strconv.ParseFloat(s, 64)
return val
- case "string":
+ case swaggerTypeArray:
+ return s
+ case swaggerTypeString:
return s
default:
return nil
diff --git a/tools/goctl/api/swagger/options_test.go b/tools/goctl/api/swagger/options_test.go
index 20abca009..f915bddad 100644
--- a/tools/goctl/api/swagger/options_test.go
+++ b/tools/goctl/api/swagger/options_test.go
@@ -161,7 +161,7 @@ func TestDefValueFromOptions(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- result := defValueFromOptions(tt.options, tt.apiType)
+ result := defValueFromOptions(testingContext(t), tt.options, tt.apiType)
assert.Equal(t, tt.expected, result)
})
}
@@ -202,7 +202,7 @@ func TestExampleValueFromOptions(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- exampleValueFromOptions(tt.options, tt.apiType)
+ exampleValueFromOptions(testingContext(t), tt.options, tt.apiType)
})
}
}
@@ -247,7 +247,7 @@ func TestValueFromOptions(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- result := valueFromOptions(tt.options, tt.key, tt.tp)
+ result := valueFromOptions(testingContext(t), tt.options, tt.key, tt.tp)
assert.Equal(t, tt.expected, result)
})
}
diff --git a/tools/goctl/api/swagger/parameter.go b/tools/goctl/api/swagger/parameter.go
index b8a1a4113..1566a8940 100644
--- a/tools/goctl/api/swagger/parameter.go
+++ b/tools/goctl/api/swagger/parameter.go
@@ -8,7 +8,25 @@ import (
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
)
-func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
+func isPostJson(ctx Context, method string, tp apiSpec.Type) (string, bool) {
+ if strings.EqualFold(method, http.MethodPost) {
+ return "", false
+ }
+ structType, ok := tp.(apiSpec.DefineStruct)
+ if !ok {
+ return "", false
+ }
+ var isPostJson bool
+ rangeMemberAndDo(ctx, structType, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
+ jsonTag, _ := tag.Get(tagJson)
+ if !isPostJson {
+ isPostJson = jsonTag != nil
+ }
+ })
+ return structType.RawName, isPostJson
+}
+
+func parametersFromType(ctx Context, method string, tp apiSpec.Type) []spec.Parameter {
if tp == nil {
return []spec.Parameter{}
}
@@ -16,12 +34,30 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
if !ok {
return []spec.Parameter{}
}
+ structName, ok := isPostJson(ctx, method, tp)
+ if ok {
+ return []spec.Parameter{
+ {
+ ParamProps: spec.ParamProps{
+ In: paramsInBody,
+ Name: paramsInBody,
+ Required: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Ref: spec.MustCreateRef(getRefName(structName)),
+ },
+ },
+ },
+ },
+ }
+ }
+
var (
resp []spec.Parameter
properties = map[string]spec.Schema{}
requiredFields []string
)
- rangeMemberAndDo(structType, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
+ rangeMemberAndDo(ctx, structType, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
headerTag, _ := tag.Get(tagHeader)
hasHeader := headerTag != nil
@@ -44,10 +80,9 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
Enum: enumsValueFromOptions(headerTag.Options),
},
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(member.Type),
- Default: defValueFromOptions(headerTag.Options, member.Type),
- Example: exampleValueFromOptions(headerTag.Options, member.Type),
- Items: sampleItemsFromGoType(member.Type),
+ Type: sampleTypeFromGoType(ctx, member.Type),
+ Default: defValueFromOptions(ctx, headerTag.Options, member.Type),
+ Items: sampleItemsFromGoType(ctx, member.Type),
},
ParamProps: spec.ParamProps{
In: paramsInHeader,
@@ -68,10 +103,9 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
Enum: enumsValueFromOptions(pathParameterTag.Options),
},
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(member.Type),
- Default: defValueFromOptions(pathParameterTag.Options, member.Type),
- Example: exampleValueFromOptions(pathParameterTag.Options, member.Type),
- Items: sampleItemsFromGoType(member.Type),
+ Type: sampleTypeFromGoType(ctx, member.Type),
+ Default: defValueFromOptions(ctx, pathParameterTag.Options, member.Type),
+ Items: sampleItemsFromGoType(ctx, member.Type),
},
ParamProps: spec.ParamProps{
In: paramsInPath,
@@ -93,10 +127,9 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
Enum: enumsValueFromOptions(formTag.Options),
},
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(member.Type),
- Default: defValueFromOptions(formTag.Options, member.Type),
- Example: exampleValueFromOptions(formTag.Options, member.Type),
- Items: sampleItemsFromGoType(member.Type),
+ Type: sampleTypeFromGoType(ctx, member.Type),
+ Default: defValueFromOptions(ctx, formTag.Options, member.Type),
+ Items: sampleItemsFromGoType(ctx, member.Type),
},
ParamProps: spec.ParamProps{
In: paramsInQuery,
@@ -116,10 +149,9 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
Enum: enumsValueFromOptions(formTag.Options),
},
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(member.Type),
- Default: defValueFromOptions(formTag.Options, member.Type),
- Example: exampleValueFromOptions(formTag.Options, member.Type),
- Items: sampleItemsFromGoType(member.Type),
+ Type: sampleTypeFromGoType(ctx, member.Type),
+ Default: defValueFromOptions(ctx, formTag.Options, member.Type),
+ Items: sampleItemsFromGoType(ctx, member.Type),
},
ParamProps: spec.ParamProps{
In: paramsInForm,
@@ -139,25 +171,25 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
}
var schema = spec.Schema{
SwaggerSchemaProps: spec.SwaggerSchemaProps{
- Example: exampleValueFromOptions(jsonTag.Options, member.Type),
+ Example: exampleValueFromOptions(ctx, jsonTag.Options, member.Type),
},
SchemaProps: spec.SchemaProps{
Description: formatComment(member.Comment),
- Type: typeFromGoType(member.Type),
- Default: defValueFromOptions(jsonTag.Options, member.Type),
+ Type: typeFromGoType(ctx, member.Type),
+ Default: defValueFromOptions(ctx, jsonTag.Options, member.Type),
Maximum: maximum,
ExclusiveMaximum: exclusiveMaximum,
Minimum: minimum,
ExclusiveMinimum: exclusiveMinimum,
Enum: enumsValueFromOptions(jsonTag.Options),
- AdditionalProperties: mapFromGoType(member.Type),
+ AdditionalProperties: mapFromGoType(ctx, member.Type),
},
}
- switch sampleTypeFromGoType(member.Type) {
+ switch sampleTypeFromGoType(ctx, member.Type) {
case swaggerTypeArray:
- schema.Items = itemsFromGoType(member.Type)
+ schema.Items = itemsFromGoType(ctx, member.Type)
case swaggerTypeObject:
- p, r := propertiesFromType(member.Type)
+ p, r := propertiesFromType(ctx, member.Type)
schema.Properties = p
schema.Required = r
}
@@ -172,7 +204,7 @@ func parametersFromType(method string, tp apiSpec.Type) []spec.Parameter {
Required: true,
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
- Type: typeFromGoType(structType),
+ Type: typeFromGoType(ctx, structType),
Properties: properties,
Required: requiredFields,
},
diff --git a/tools/goctl/api/swagger/path.go b/tools/goctl/api/swagger/path.go
index 328db2706..e3379ca3c 100644
--- a/tools/goctl/api/swagger/path.go
+++ b/tools/goctl/api/swagger/path.go
@@ -9,18 +9,18 @@ import (
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
)
-func spec2Paths(info apiSpec.Info, srv apiSpec.Service) *spec.Paths {
+func spec2Paths(ctx Context, srv apiSpec.Service) *spec.Paths {
paths := &spec.Paths{
Paths: make(map[string]spec.PathItem),
}
for _, group := range srv.Groups {
- prefix := path.Clean(strings.TrimPrefix(group.GetAnnotation("prefix"), "/"))
+ prefix := path.Clean(strings.TrimPrefix(group.GetAnnotation(propertyKeyPrefix), "/"))
for _, route := range group.Routes {
- routPath := pathVariable2SwaggerVariable(route.Path)
+ routPath := pathVariable2SwaggerVariable(ctx, route.Path)
if len(prefix) > 0 && prefix != "." {
routPath = "/" + path.Clean(prefix) + routPath
}
- pathItem := spec2Path(info, group, route)
+ pathItem := spec2Path(ctx, group, route)
existPathItem, ok := paths.Paths[routPath]
if !ok {
paths.Paths[routPath] = pathItem
@@ -60,8 +60,8 @@ func mergePathItem(old, new spec.PathItem) spec.PathItem {
return old
}
-func spec2Path(info apiSpec.Info, group apiSpec.Group, route apiSpec.Route) spec.PathItem {
- authType := getStringFromKVOrDefault(group.Annotation.Properties, "authType", "")
+func spec2Path(ctx Context, group apiSpec.Group, route apiSpec.Route) spec.PathItem {
+ authType := getStringFromKVOrDefault(group.Annotation.Properties, propertyKeyAuthType, "")
var security []map[string][]string
if len(authType) > 0 {
security = []map[string][]string{
@@ -72,20 +72,20 @@ func spec2Path(info apiSpec.Info, group apiSpec.Group, route apiSpec.Route) spec
}
op := &spec.Operation{
OperationProps: spec.OperationProps{
- Description: getStringFromKVOrDefault(route.AtDoc.Properties, "description", ""),
- Consumes: consumesFromTypeOrDef(route.Method, route.RequestType),
- Produces: getListFromInfoOrDefault(route.AtDoc.Properties, "produces", []string{applicationJson}),
- Schemes: getListFromInfoOrDefault(route.AtDoc.Properties, "schemes", []string{schemeHttps}),
- Tags: getListFromInfoOrDefault(group.Annotation.Properties, "tags", []string{""}),
- Summary: getStringFromKVOrDefault(route.AtDoc.Properties, "summary", getFirstUsableString(route.AtDoc.Text, route.Handler)),
- Deprecated: getBoolFromKVOrDefault(route.AtDoc.Properties, "deprecated", false),
- Parameters: parametersFromType(route.Method, route.RequestType),
- Responses: jsonResponseFromType(info, route.AtDoc, route.ResponseType),
+ Description: getStringFromKVOrDefault(route.AtDoc.Properties, propertyKeyDescription, ""),
+ Consumes: consumesFromTypeOrDef(ctx, route.Method, route.RequestType),
+ Produces: getListFromInfoOrDefault(route.AtDoc.Properties, propertyKeyProduces, []string{applicationJson}),
+ Schemes: getListFromInfoOrDefault(route.AtDoc.Properties, propertyKeySchemes, []string{schemeHttps}),
+ Tags: getListFromInfoOrDefault(group.Annotation.Properties, propertyKeyTags, getListFromInfoOrDefault(group.Annotation.Properties, propertyKeySummary, []string{})),
+ Summary: getStringFromKVOrDefault(route.AtDoc.Properties, propertyKeySummary, getFirstUsableString(route.AtDoc.Text, route.Handler)),
+ Deprecated: getBoolFromKVOrDefault(route.AtDoc.Properties, propertyKeyDeprecated, false),
+ Parameters: parametersFromType(ctx, route.Method, route.RequestType),
+ Responses: jsonResponseFromType(ctx, route.AtDoc, route.ResponseType),
Security: security,
},
}
- externalDocsDescription := getStringFromKVOrDefault(route.AtDoc.Properties, "externalDocsDescription", "")
- externalDocsURL := getStringFromKVOrDefault(route.AtDoc.Properties, "externalDocsURL", "")
+ externalDocsDescription := getStringFromKVOrDefault(route.AtDoc.Properties, propertyKeyExternalDocsDescription, "")
+ externalDocsURL := getStringFromKVOrDefault(route.AtDoc.Properties, propertyKeyExternalDocsURL, "")
if len(externalDocsDescription) > 0 || len(externalDocsURL) > 0 {
op.ExternalDocs = &spec.ExternalDocumentation{
Description: externalDocsDescription,
diff --git a/tools/goctl/api/swagger/properties.go b/tools/goctl/api/swagger/properties.go
index 6a4ebe4f0..74d6c00c0 100644
--- a/tools/goctl/api/swagger/properties.go
+++ b/tools/goctl/api/swagger/properties.go
@@ -5,18 +5,18 @@ import (
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
)
-func propertiesFromType(tp apiSpec.Type) (spec.SchemaProperties, []string) {
+func propertiesFromType(ctx Context, tp apiSpec.Type) (spec.SchemaProperties, []string) {
var (
properties = map[string]spec.Schema{}
requiredFields []string
)
switch val := tp.(type) {
case apiSpec.PointerType:
- return propertiesFromType(val.Type)
+ return propertiesFromType(ctx, val.Type)
case apiSpec.ArrayType:
- return propertiesFromType(val.Value)
+ return propertiesFromType(ctx, val.Value)
case apiSpec.DefineStruct, apiSpec.NestedStruct:
- rangeMemberAndDo(val, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
+ rangeMemberAndDo(ctx, val, func(tag *apiSpec.Tags, required bool, member apiSpec.Member) {
var (
jsonTagString = member.Name
minimum, maximum *float64
@@ -28,38 +28,46 @@ func propertiesFromType(tp apiSpec.Type) (spec.SchemaProperties, []string) {
if jsonTag != nil {
jsonTagString = jsonTag.Name
minimum, maximum, exclusiveMinimum, exclusiveMaximum = rangeValueFromOptions(jsonTag.Options)
- example = exampleValueFromOptions(jsonTag.Options, member.Type)
- defaultValue = defValueFromOptions(jsonTag.Options, member.Type)
+ example = exampleValueFromOptions(ctx, jsonTag.Options, member.Type)
+ defaultValue = defValueFromOptions(ctx, jsonTag.Options, member.Type)
enum = enumsValueFromOptions(jsonTag.Options)
}
if required {
requiredFields = append(requiredFields, jsonTagString)
}
- var schema = spec.Schema{
+
+ schema := spec.Schema{
SwaggerSchemaProps: spec.SwaggerSchemaProps{
Example: example,
},
SchemaProps: spec.SchemaProps{
Description: formatComment(member.Comment),
- Type: typeFromGoType(member.Type),
+ Type: typeFromGoType(ctx, member.Type),
Default: defaultValue,
Maximum: maximum,
ExclusiveMaximum: exclusiveMaximum,
Minimum: minimum,
ExclusiveMinimum: exclusiveMinimum,
Enum: enum,
- AdditionalProperties: mapFromGoType(member.Type),
+ AdditionalProperties: mapFromGoType(ctx, member.Type),
},
}
- switch sampleTypeFromGoType(member.Type) {
+
+ switch sampleTypeFromGoType(ctx, member.Type) {
case swaggerTypeArray:
- schema.Items = itemsFromGoType(member.Type)
+ schema.Items = itemsFromGoType(ctx, member.Type)
case swaggerTypeObject:
- p, r := propertiesFromType(member.Type)
+ p, r := propertiesFromType(ctx, member.Type)
schema.Properties = p
schema.Required = r
}
+ if ctx.UseDefinitions {
+ structName, containsStruct := containsStruct(member.Type)
+ if containsStruct {
+ schema.SchemaProps.Ref = spec.MustCreateRef(getRefName(structName))
+ }
+ }
properties[jsonTagString] = schema
})
@@ -67,3 +75,22 @@ func propertiesFromType(tp apiSpec.Type) (spec.SchemaProperties, []string) {
return properties, requiredFields
}
+
+func containsStruct(tp apiSpec.Type) (string, bool) {
+ switch val := tp.(type) {
+ case apiSpec.PointerType:
+ return containsStruct(val.Type)
+ case apiSpec.ArrayType:
+ return containsStruct(val.Value)
+ case apiSpec.DefineStruct:
+ return val.RawName, true
+ case apiSpec.MapType:
+ return containsStruct(val.Value)
+ default:
+ return "", false
+ }
+}
+
+func getRefName(typeName string) string {
+ return "#/definitions/" + typeName
+}
diff --git a/tools/goctl/api/swagger/response.go b/tools/goctl/api/swagger/response.go
index 3ebce8400..3940a8c20 100644
--- a/tools/goctl/api/swagger/response.go
+++ b/tools/goctl/api/swagger/response.go
@@ -1,25 +1,62 @@
package swagger
import (
+ "net/http"
+
"github.com/go-openapi/spec"
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
)
-func jsonResponseFromType(info apiSpec.Info, atDoc apiSpec.AtDoc, tp apiSpec.Type) *spec.Responses {
- p, _ := propertiesFromType(tp)
+func jsonResponseFromType(ctx Context, atDoc apiSpec.AtDoc, tp apiSpec.Type) *spec.Responses {
+ if tp == nil {
+ return &spec.Responses{
+ ResponsesProps: spec.ResponsesProps{
+ StatusCodeResponses: map[int]spec.Response{
+ http.StatusOK: {
+ ResponseProps: spec.ResponseProps{
+ Description: "",
+ Schema: &spec.Schema{},
+ },
+ },
+ },
+ },
+ }
+ }
props := spec.SchemaProps{
- Type: typeFromGoType(tp),
- Properties: p,
- AdditionalProperties: mapFromGoType(tp),
- Items: itemsFromGoType(tp),
+ AdditionalProperties: mapFromGoType(ctx, tp),
+ Items: itemsFromGoType(ctx, tp),
+ }
+ if ctx.UseDefinitions {
+ structName, ok := containsStruct(tp)
+ if ok {
+ props.Ref = spec.MustCreateRef(getRefName(structName))
+ return &spec.Responses{
+ ResponsesProps: spec.ResponsesProps{
+ StatusCodeResponses: map[int]spec.Response{
+ http.StatusOK: {
+ ResponseProps: spec.ResponseProps{
+ Schema: &spec.Schema{
+ SchemaProps: wrapCodeMsgProps(ctx, props, atDoc),
+ },
+ },
+ },
+ },
+ },
+ }
+ }
}
+ p, _ := propertiesFromType(ctx, tp)
+ props.Type = typeFromGoType(ctx, tp)
+ props.Properties = p
return &spec.Responses{
ResponsesProps: spec.ResponsesProps{
- Default: &spec.Response{
- ResponseProps: spec.ResponseProps{
- Schema: &spec.Schema{
- SchemaProps: wrapCodeMsgProps(props, info, atDoc),
+ StatusCodeResponses: map[int]spec.Response{
+ http.StatusOK: {
+ ResponseProps: spec.ResponseProps{
+ Schema: &spec.Schema{
+ SchemaProps: wrapCodeMsgProps(ctx, props, atDoc),
+ },
},
},
},
diff --git a/tools/goctl/api/swagger/swagger.go b/tools/goctl/api/swagger/swagger.go
index 00a8014c1..5cc113921 100644
--- a/tools/goctl/api/swagger/swagger.go
+++ b/tools/goctl/api/swagger/swagger.go
@@ -8,12 +8,11 @@ import (
"github.com/go-openapi/spec"
apiSpec "github.com/zeromicro/go-zero/tools/goctl/api/spec"
"github.com/zeromicro/go-zero/tools/goctl/internal/version"
- "github.com/zeromicro/go-zero/tools/goctl/util"
)
func spec2Swagger(api *apiSpec.ApiSpec) (*spec.Swagger, error) {
+ ctx := contextFromApi(api.Info)
extensions, info := specExtensions(api.Info)
-
var securityDefinitions spec.SecurityDefinitions
securityDefinitionsFromJson := getStringFromKVOrDefault(api.Info.Properties, "securityDefinitionsFromJson", `{}`)
_ = json.Unmarshal([]byte(securityDefinitionsFromJson), &securityDefinitions)
@@ -22,14 +21,15 @@ func spec2Swagger(api *apiSpec.ApiSpec) (*spec.Swagger, error) {
Extensions: extensions,
},
SwaggerProps: spec.SwaggerProps{
- Consumes: getListFromInfoOrDefault(api.Info.Properties, "consumes", []string{applicationJson}),
- Produces: getListFromInfoOrDefault(api.Info.Properties, "produces", []string{applicationJson}),
- Schemes: getListFromInfoOrDefault(api.Info.Properties, "schemes", []string{schemeHttps}),
+ Definitions: definitionsFromTypes(ctx, api.Types),
+ Consumes: getListFromInfoOrDefault(api.Info.Properties, propertyKeyConsumes, []string{applicationJson}),
+ Produces: getListFromInfoOrDefault(api.Info.Properties, propertyKeyProduces, []string{applicationJson}),
+ Schemes: getListFromInfoOrDefault(api.Info.Properties, propertyKeySchemes, []string{schemeHttps}),
Swagger: swaggerVersion,
Info: info,
- Host: getStringFromKVOrDefault(api.Info.Properties, "host", defaultHost),
- BasePath: getStringFromKVOrDefault(api.Info.Properties, "basePath", defaultBasePath),
- Paths: spec2Paths(api.Info, api.Service),
+ Host: getStringFromKVOrDefault(api.Info.Properties, propertyKeyHost, ""),
+ BasePath: getStringFromKVOrDefault(api.Info.Properties, propertyKeyBasePath, defaultBasePath),
+ Paths: spec2Paths(ctx, api.Service),
SecurityDefinitions: securityDefinitions,
},
}
@@ -42,7 +42,7 @@ func formatComment(comment string) string {
return strings.TrimSpace(s)
}
-func sampleItemsFromGoType(tp apiSpec.Type) *spec.Items {
+func sampleItemsFromGoType(ctx Context, tp apiSpec.Type) *spec.Items {
val, ok := tp.(apiSpec.ArrayType)
if !ok {
return nil
@@ -52,14 +52,14 @@ func sampleItemsFromGoType(tp apiSpec.Type) *spec.Items {
case apiSpec.PrimitiveType:
return &spec.Items{
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(item),
+ Type: sampleTypeFromGoType(ctx, item),
},
}
case apiSpec.ArrayType:
return &spec.Items{
SimpleSchema: spec.SimpleSchema{
- Type: sampleTypeFromGoType(item),
- Items: sampleItemsFromGoType(item),
+ Type: sampleTypeFromGoType(ctx, item),
+ Items: sampleItemsFromGoType(ctx, item),
},
}
default: // unsupported type
@@ -68,30 +68,30 @@ func sampleItemsFromGoType(tp apiSpec.Type) *spec.Items {
}
// itemsFromGoType returns the schema or array of the type, just for non json body parameters.
-func itemsFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
+func itemsFromGoType(ctx Context, tp apiSpec.Type) *spec.SchemaOrArray {
array, ok := tp.(apiSpec.ArrayType)
if !ok {
return nil
}
- return itemFromGoType(array.Value)
+ return itemFromGoType(ctx, array.Value)
}
-func mapFromGoType(tp apiSpec.Type) *spec.SchemaOrBool {
+func mapFromGoType(ctx Context, tp apiSpec.Type) *spec.SchemaOrBool {
mapType, ok := tp.(apiSpec.MapType)
if !ok {
return nil
}
var schema = &spec.Schema{
SchemaProps: spec.SchemaProps{
- Type: typeFromGoType(mapType.Value),
- AdditionalProperties: mapFromGoType(mapType.Value),
+ Type: typeFromGoType(ctx, mapType.Value),
+ AdditionalProperties: mapFromGoType(ctx, mapType.Value),
},
}
- switch sampleTypeFromGoType(mapType.Value) {
+ switch sampleTypeFromGoType(ctx, mapType.Value) {
case swaggerTypeArray:
- schema.Items = itemsFromGoType(mapType.Value)
+ schema.Items = itemsFromGoType(ctx, mapType.Value)
case swaggerTypeObject:
- p, r := propertiesFromType(mapType.Value)
+ p, r := propertiesFromType(ctx, mapType.Value)
schema.Properties = p
schema.Required = r
}
@@ -102,37 +102,37 @@ func mapFromGoType(tp apiSpec.Type) *spec.SchemaOrBool {
}
// itemFromGoType returns the schema or array of the type, just for non json body parameters.
-func itemFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
+func itemFromGoType(ctx Context, tp apiSpec.Type) *spec.SchemaOrArray {
switch itemType := tp.(type) {
case apiSpec.PrimitiveType:
return &spec.SchemaOrArray{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
- Type: typeFromGoType(tp),
+ Type: typeFromGoType(ctx, tp),
},
},
}
- case apiSpec.DefineStruct, apiSpec.NestedStruct:
- properties, requiredFields := propertiesFromType(itemType)
+ case apiSpec.DefineStruct, apiSpec.NestedStruct, apiSpec.MapType:
+ properties, requiredFields := propertiesFromType(ctx, itemType)
return &spec.SchemaOrArray{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
- Type: typeFromGoType(itemType),
- Items: itemsFromGoType(itemType),
+ Type: typeFromGoType(ctx, itemType),
+ Items: itemsFromGoType(ctx, itemType),
Properties: properties,
Required: requiredFields,
- AdditionalProperties: mapFromGoType(itemType),
+ AdditionalProperties: mapFromGoType(ctx, itemType),
},
},
}
case apiSpec.PointerType:
- return itemFromGoType(itemType.Type)
+ return itemFromGoType(ctx, itemType.Type)
case apiSpec.ArrayType:
return &spec.SchemaOrArray{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
- Type: typeFromGoType(itemType),
- Items: itemsFromGoType(itemType),
+ Type: typeFromGoType(ctx, itemType),
+ Items: itemsFromGoType(ctx, itemType),
},
},
}
@@ -140,7 +140,7 @@ func itemFromGoType(tp apiSpec.Type) *spec.SchemaOrArray {
return nil
}
-func typeFromGoType(tp apiSpec.Type) []string {
+func typeFromGoType(ctx Context, tp apiSpec.Type) []string {
switch val := tp.(type) {
case apiSpec.PrimitiveType:
res, ok := tpMapper[val.RawName]
@@ -152,12 +152,12 @@ func typeFromGoType(tp apiSpec.Type) []string {
case apiSpec.DefineStruct, apiSpec.MapType:
return []string{swaggerTypeObject}
case apiSpec.PointerType:
- return typeFromGoType(val.Type)
+ return typeFromGoType(ctx, val.Type)
}
return nil
}
-func sampleTypeFromGoType(tp apiSpec.Type) string {
+func sampleTypeFromGoType(ctx Context, tp apiSpec.Type) string {
switch val := tp.(type) {
case apiSpec.PrimitiveType:
return tpMapper[val.RawName]
@@ -166,13 +166,13 @@ func sampleTypeFromGoType(tp apiSpec.Type) string {
case apiSpec.DefineStruct, apiSpec.MapType, apiSpec.NestedStruct:
return swaggerTypeObject
case apiSpec.PointerType:
- return sampleTypeFromGoType(val.Type)
+ return sampleTypeFromGoType(ctx, val.Type)
default:
return ""
}
}
-func typeContainsTag(structType apiSpec.DefineStruct, tag string) bool {
+func typeContainsTag(_ Context, structType apiSpec.DefineStruct, tag string) bool {
for _, field := range structType.Members {
tags, _ := apiSpec.Parse(field.Tag)
for _, t := range tags.Tags() {
@@ -184,13 +184,13 @@ func typeContainsTag(structType apiSpec.DefineStruct, tag string) bool {
return false
}
-func expandMembers(tp apiSpec.Type) []apiSpec.Member {
+func expandMembers(ctx Context, tp apiSpec.Type) []apiSpec.Member {
var members []apiSpec.Member
switch val := tp.(type) {
case apiSpec.DefineStruct:
for _, v := range val.Members {
if v.IsInline {
- members = append(members, expandMembers(v.Type)...)
+ members = append(members, expandMembers(ctx, v.Type)...)
continue
}
members = append(members, v)
@@ -198,7 +198,7 @@ func expandMembers(tp apiSpec.Type) []apiSpec.Member {
case apiSpec.NestedStruct:
for _, v := range val.Members {
if v.IsInline {
- members = append(members, expandMembers(v.Type)...)
+ members = append(members, expandMembers(ctx, v.Type)...)
continue
}
members = append(members, v)
@@ -208,42 +208,42 @@ func expandMembers(tp apiSpec.Type) []apiSpec.Member {
return members
}
-func rangeMemberAndDo(structType apiSpec.Type, do func(tag *apiSpec.Tags, required bool, member apiSpec.Member)) {
- var members = expandMembers(structType)
+func rangeMemberAndDo(ctx Context, structType apiSpec.Type, do func(tag *apiSpec.Tags, required bool, member apiSpec.Member)) {
+ var members = expandMembers(ctx, structType)
for _, field := range members {
tags, _ := apiSpec.Parse(field.Tag)
- required := isRequired(tags)
+ required := isRequired(ctx, tags)
do(tags, required, field)
}
}
-func isRequired(tags *apiSpec.Tags) bool {
+func isRequired(ctx Context, tags *apiSpec.Tags) bool {
tag, err := tags.Get(tagJson)
if err == nil {
- return !isOptional(tag.Options)
+ return !isOptional(ctx, tag.Options)
}
tag, err = tags.Get(tagForm)
if err == nil {
- return !isOptional(tag.Options)
+ return !isOptional(ctx, tag.Options)
}
tag, err = tags.Get(tagPath)
if err == nil {
- return !isOptional(tag.Options)
+ return !isOptional(ctx, tag.Options)
}
return false
}
-func isOptional(options []string) bool {
+func isOptional(_ Context, options []string) bool {
for _, option := range options {
- if option == "optional" {
+ if option == optionalFlag {
return true
}
}
return false
}
-func pathVariable2SwaggerVariable(path string) string {
+func pathVariable2SwaggerVariable(_ Context, path string) string {
pathItems := strings.FieldsFunc(path, slashRune)
var resp []string
for _, v := range pathItems {
@@ -256,13 +256,12 @@ func pathVariable2SwaggerVariable(path string) string {
return "/" + strings.Join(resp, "/")
}
-func wrapCodeMsgProps(properties spec.SchemaProps, api apiSpec.Info, atDoc apiSpec.AtDoc) spec.SchemaProps {
- wrapCodeMsg := getBoolFromKVOrDefault(api.Properties, "wrapCodeMsg", false)
- if !wrapCodeMsg {
+func wrapCodeMsgProps(ctx Context, properties spec.SchemaProps, atDoc apiSpec.AtDoc) spec.SchemaProps {
+ if !ctx.WrapCodeMsg {
return properties
}
- globalCodeDesc := getStringFromKVOrDefault(api.Properties, "bizCodeEnumDescription", "business code")
- methodCodeDesc := getStringFromKVOrDefault(atDoc.Properties, "bizCodeEnumDescription", globalCodeDesc)
+ globalCodeDesc := ctx.BizCodeEnumDescription
+ methodCodeDesc := getStringFromKVOrDefault(atDoc.Properties, propertyKeyBizCodeEnumDescription, globalCodeDesc)
return spec.SchemaProps{
Type: []string{swaggerTypeObject},
Properties: spec.SchemaProperties{
@@ -300,22 +299,22 @@ func specExtensions(api apiSpec.Info) (spec.Extensions, *spec.Info) {
ext.Add("x-go-zero-doc", "https://go-zero.dev/")
info := &spec.Info{}
- info.Description = util.Unquote(api.Properties["description"])
- info.Title = util.Unquote(api.Properties["title"])
- info.TermsOfService = util.Unquote(api.Properties["termsOfService"])
- info.Version = util.Unquote(api.Properties["version"])
+ info.Title = getStringFromKVOrDefault(api.Properties, propertyKeyTitle, "")
+ info.Description = getStringFromKVOrDefault(api.Properties, propertyKeyDescription, "")
+ info.TermsOfService = getStringFromKVOrDefault(api.Properties, propertyKeyTermsOfService, "")
+ info.Version = getStringFromKVOrDefault(api.Properties, propertyKeyVersion, "1.0")
contactInfo := spec.ContactInfo{}
- contactInfo.Name = util.Unquote(api.Properties["contactName"])
- contactInfo.URL = util.Unquote(api.Properties["contactURL"])
- contactInfo.Email = util.Unquote(api.Properties["contactEmail"])
+ contactInfo.Name = getStringFromKVOrDefault(api.Properties, propertyKeyContactName, "")
+ contactInfo.URL = getStringFromKVOrDefault(api.Properties, propertyKeyContactURL, "")
+ contactInfo.Email = getStringFromKVOrDefault(api.Properties, propertyKeyContactEmail, "")
if len(contactInfo.Name) > 0 || len(contactInfo.URL) > 0 || len(contactInfo.Email) > 0 {
info.Contact = &contactInfo
}
license := &spec.License{}
- license.Name = util.Unquote(api.Properties["licenseName"])
- license.URL = util.Unquote(api.Properties["licenseURL"])
+ license.Name = getStringFromKVOrDefault(api.Properties, propertyKeyLicenseName, "")
+ license.URL = getStringFromKVOrDefault(api.Properties, propertyKeyLicenseURL, "")
if len(license.Name) > 0 || len(license.URL) > 0 {
info.License = license
}
diff --git a/tools/goctl/api/swagger/swagger_test.go b/tools/goctl/api/swagger/swagger_test.go
index 902337fbe..d9fa47a95 100644
--- a/tools/goctl/api/swagger/swagger_test.go
+++ b/tools/goctl/api/swagger/swagger_test.go
@@ -19,7 +19,7 @@ func Test_pathVariable2SwaggerVariable(t *testing.T) {
}
for _, tc := range testCases {
- result := pathVariable2SwaggerVariable(tc.input)
+ result := pathVariable2SwaggerVariable(testingContext(t), tc.input)
assert.Equal(t, tc.expected, result)
}
}
diff --git a/tools/goctl/build.env b/tools/goctl/build.env
new file mode 100644
index 000000000..1adc005bb
--- /dev/null
+++ b/tools/goctl/build.env
@@ -0,0 +1,2 @@
+APP_NAME=goctl
+APP_VERSION=1.8.4-alpha
\ No newline at end of file
diff --git a/tools/goctl/build.sh b/tools/goctl/build.sh
new file mode 100644
index 000000000..358aa15b7
--- /dev/null
+++ b/tools/goctl/build.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+source build.env
+APP_NAME=$APP_NAME
+VERSION=$APP_VERSION
+BUILD_DIR="dist"
+ZIP_DIR="${BUILD_DIR}/zips"
+
+PLATFORMS=(
+ "linux/amd64"
+ "linux/arm64"
+ "darwin/amd64"
+ "darwin/arm64"
+ "windows/amd64"
+ "windows/arm64"
+)
+
+rm -rf "${BUILD_DIR}"
+mkdir -p "${ZIP_DIR}"
+
+for PLATFORM in "${PLATFORMS[@]}"; do
+ GOOS=${PLATFORM%/*}
+ GOARCH=${PLATFORM#*/}
+
+ OUTPUT="${BUILD_DIR}/${APP_NAME}-${VERSION}-${GOOS}-${GOARCH}"
+
+ if [ "${GOOS}" = "windows" ]; then
+ OUTPUT="${OUTPUT}.exe"
+ fi
+
+ echo "Building for ${GOOS}/${GOARCH}..."
+
+ env GOOS="${GOOS}" GOARCH="${GOARCH}" go build -o "${OUTPUT}" goctl.go
+
+ if [ $? -ne 0 ]; then
+ echo "Error building for ${GOOS}/${GOARCH}"
+ exit 1
+ fi
+
+ ZIP_OUTPUT="${ZIP_DIR}/$(basename "${OUTPUT}")"
+ if [ "${GOOS}" = "windows" ]; then
+ zip -j "${ZIP_OUTPUT%.exe}.zip" "${OUTPUT}"
+ else
+ zip -j "${ZIP_OUTPUT}.zip" "${OUTPUT}"
+ fi
+
+ echo "Created zip: ${ZIP_OUTPUT}.zip"
+done
+
+echo "All builds completed successfully. Zip files are in ${ZIP_DIR}/"
\ No newline at end of file
diff --git a/tools/goctl/internal/flags/default_en.json b/tools/goctl/internal/flags/default_en.json
index d33bb3eec..6fe8f903e 100644
--- a/tools/goctl/internal/flags/default_en.json
+++ b/tools/goctl/internal/flags/default_en.json
@@ -38,7 +38,8 @@
"remote": "{{.global.remote}}",
"branch": "{{.global.branch}}",
"style": "{{.global.style}}",
- "test": "Generate test files"
+ "test": "Generate test files",
+ "type-group": "Generate type group files"
},
"new": {
"short": "Fast create api service",
diff --git a/tools/goctl/internal/version/version.go b/tools/goctl/internal/version/version.go
index 09fab1581..ed5de9b5e 100644
--- a/tools/goctl/internal/version/version.go
+++ b/tools/goctl/internal/version/version.go
@@ -6,7 +6,7 @@ import (
)
// BuildVersion is the version of goctl.
-const BuildVersion = "1.8.3"
+const BuildVersion = "1.8.4-alpha"
var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
diff --git a/tools/goctl/pkg/parser/api/parser/parser.go b/tools/goctl/pkg/parser/api/parser/parser.go
index c66f31c1e..53175a695 100644
--- a/tools/goctl/pkg/parser/api/parser/parser.go
+++ b/tools/goctl/pkg/parser/api/parser/parser.go
@@ -1356,7 +1356,7 @@ func (p *Parser) parseKVExpression() *ast.KVExpr {
expr.Colon = p.curTokenNode()
// token STRING
- if !p.advanceIfPeekTokenIs(token.STRING, token.RAW_STRING) {
+ if !p.advanceIfPeekTokenIs(token.STRING, token.RAW_STRING, token.IDENT) {
return nil
}
diff --git a/tools/goctl/pkg/parser/api/parser/parser_test.go b/tools/goctl/pkg/parser/api/parser/parser_test.go
index 61c3c828c..5f892eb0c 100644
--- a/tools/goctl/pkg/parser/api/parser/parser_test.go
+++ b/tools/goctl/pkg/parser/api/parser/parser_test.go
@@ -130,6 +130,8 @@ func TestParser_Parse_infoStmt(t *testing.T) {
"author": `"type author here"`,
"email": `"type email here"`,
"version": `"type version here"`,
+ "enable": `true`,
+ "disable": `false`,
}
p := New("foo.api", infoTestAPI)
result := p.Parse()
diff --git a/tools/goctl/pkg/parser/api/parser/testdata/info_test.api b/tools/goctl/pkg/parser/api/parser/testdata/info_test.api
index 0e543a298..6a06c8bac 100644
--- a/tools/goctl/pkg/parser/api/parser/testdata/info_test.api
+++ b/tools/goctl/pkg/parser/api/parser/testdata/info_test.api
@@ -4,4 +4,6 @@ info(
author: "type author here"
email: "type email here"
version: "type version here"
+ enable: true
+ disable: false
)
\ No newline at end of file
diff --git a/tools/goctl/pkg/parser/api/parser/testdata/test.api b/tools/goctl/pkg/parser/api/parser/testdata/test.api
index ea5017dc6..02faed656 100644
--- a/tools/goctl/pkg/parser/api/parser/testdata/test.api
+++ b/tools/goctl/pkg/parser/api/parser/testdata/test.api
@@ -10,6 +10,8 @@ info ( // info stmt
author: "type author here"
email: "type email here"
version: "type version here"
+ enable: true
+ disable: false
)
type AliasInt int