Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-08 20:54:16
avant
759 Les gens l'ont consulté

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))
}
Copier après la connexion

Voici la méthode du gestionnaire :

// Creates new user
func CreateUser(c *gin.Context, register *models.Register) error {
    ...

    return nil
}
Copier après la connexion

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      }
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!