Maison >développement back-end >Golang >Le générateur Fizz OpenAPi de Gin renomme les types
J'ai créé une API simple écrite en gin. J'utilise fizz pour générer la spécification openapi 3. Voici le point final de mon message :
// sets user route group func userroute(grp *fizz.routergroup) { // create new user grp.post("", []fizz.operationoption{ fizz.summary("creates new user and sends verification mail."), ... }, tonic.handler(handlers.createuser, 201)) }
Voici la méthode du gestionnaire :
// Creates new user func CreateUser(c *gin.Context, register *models.Register) error { ... return nil }
Le problème est que dans la spécification json générée, le modèle "register" est affiché comme "createuserinput":
Existe-t-il un moyen de résoudre ce problème ? Ou est-ce normal ?
Selon la implémentation, le nom du schéma est généré par l'instruction suivante : name := strings.title(op.id) + "input"
(请参见下面的 23
ligne) :
1 // setOperationParams adds the fields of the struct type t 2 // to the given operation. 3 func (g *Generator) setOperationParams(op *Operation, t, parent reflect.Type, allowBody bool, path string) error { 4 if t.Kind() != reflect.Struct { 5 return errors.New("input type is not a struct") 6 } 7 if err := g.buildParamsRecursive(op, t, parent, allowBody); err != nil { 8 return err 9 } 10 // Input fields that are neither path- nor query-bound 11 // have been extracted into the operation's RequestBody 12 // If the RequestBody is not nil, give it a name and 13 // move it to the openapi spec's components/schemas section 14 // Replace the RequestBody's schema with a reference 15 // to the named schema in components/schemas 16 if op.RequestBody != nil { 17 mt := tonic.MediaType() 18 if mt == "" { 19 mt = anyMediaType 20 } 21 sch := op.RequestBody.Content[mt].Schema 22 if sch != nil { 23 name := strings.Title(op.ID) + "Input" 24 g.api.Components.Schemas[name] = sch 25 op.RequestBody.Content[mt].Schema = &SchemaOrRef{Reference: &Reference{ 26 Ref: componentsSchemaPath + name, 27 }} 28 } 29 }
Vous pouvez utiliser fizz.id pour personnaliser l'identifiant de l'opération, mais il n'existe aucun moyen de supprimer le suffixe input
. Si vous souhaitez vraiment générer des noms de schéma différemment, vous devrez bifurquer le référentiel et modifier l'implémentation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!