Maison  >  Article  >  développement back-end  >  Le générateur Fizz OpenAPi de Gin renomme les types

Le générateur Fizz OpenAPi de Gin renomme les types

WBOY
WBOYavant
2024-02-08 20:54:16743parcourir

Gin 的 Fizz OpenAPi 生成器正在重命名类型

Contenu de la question

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 ?


Bonne réponse


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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer