1

我正在运行 go-swagger head of master https://github.com/go-swagger/go-swagger/commit/3981236c3f6bd9eabb26f14e9d31b853d340405f

不确定这是一个问题,还是我缺乏理解。我有一个 healthcheck 方法,默认情况下返回状态 500 以及模型中定义的 errorMessage 对象。但是,WithPayload 方法采用 GetHealthcheckDefaultBodyBody 类型。这里不是什么大问题,因为我可以只创建其中一个,但是在我需要返回模型类型数组的地方,我最终会编写很多样板来从模型类型映射到 BodyBody 类型,例如

func ClientsGet(params clients.GetClientsParams) middleware.Responder {

    results, err := repository.GetAllClients()

    if err != nil {
        return clients.NewGetClientsDefault(500).WithPayload(clients.GetClientsDefaultBodyBody{Message: sPtr(err.Error())})
    }


    return &clients.GetClientsOK{results} //does not compile as GetClientsOK accepts []*clients.GetClientsOKBodyBody not []*models.Client
}

我注意到 repo 中的示例代码在这方面与我生成的代码不同:https ://github.com/go-swagger/go-swagger/blob/3981236c3f6bd9eabb26f14e9d31b853d340405f/examples/tutorials/todo-list/server-complete /restapi/operations/todos/add_one_responses.go。我无法从此处的示例规范生成代码:https ://github.com/go-swagger/go-swagger/blob/3981236c3f6bd9eabb26f14e9d31b853d340405f/examples/tutorials/todo-list/server-complete/swagger.yml

我的规格:

{
  "swagger": "2.0",
  "info": {
    "title": "M3 Intl Maas Service",
    "version": "0.1.0"
  },
  "produces": [
    "application/json"
  ],
  "consumes": [
    "application/json"
  ],
  "schemes": [
    "http"
  ],
  "definitions": {
    "client": {
      "properties": {
        "id": {
          "format": "int64",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "name"
      ],
      "type": "object"
    },
    "messageTeaser": {
      "properties": {
        "campaignId": {
          "type": "string"
        },
        "clientName": {
          "type": "string"
        },
        "footer": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "isNew": {
          "type": "boolean"
        },
        "jobNumber": {
          "type": "string"
        },
        "piLink": {
          "type": "string"
        },
        "repId": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title",
        "summary",
        "isNew",
        "footer",
        "jobNumber",
        "clientName",
        "piLink",
        "repId",
        "campaignId"
      ],
      "type": "object"
    },
    "errorMessage": {
      "type": "object",
      "required": [
        "message"
      ],
      "properties": {
        "message": {
          "type": "string"
        }
      }
    }
  },
  "paths": {
    "/clients": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "get client",
            "schema": {
              "items": {
                "properties": {
                  "id": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        },
        "tags": [
          "clients"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          },
          {
            "in": "body",
            "required": true,
            "name": "client",
            "schema": {
              "properties": {
                "id": {
                  "format": "int64",
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "name"
              ],
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "update client",
            "schema": {
              "items": {
                "properties": {
                  "id": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        },
        "tags": [
          "clients"
        ]
      },
      "delete": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "delete client"
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/clients/{client_id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "get client",
            "schema": {
              "items": {
                "properties": {
                  "id": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "items": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "clients"
        ]
      },
      "put": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          },
          {
            "in": "body",
            "required": true,
            "name": "client",
            "schema": {
              "properties": {
                "id": {
                  "format": "int64",
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "name"
              ],
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "update client",
            "schema": {
              "items": {
                "properties": {
                  "id": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "items": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "clients"
        ]
      },
      "delete": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "client_id",
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "delete client"
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "items": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/healthcheck": {
      "get": {
        "responses": {
          "200": {
            "description": "confirm that the service is healthy"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        },
        "tags": [
          "healthcheck"
        ]
      }
    },
    "/usermessagesummary/{community_id}/{user_id}/{lang_id}": {
      "get": {
        "parameters": [
          {
            "in": "path",
            "required": true,
            "name": "community_id",
            "type": "string"
          },
          {
            "in": "path",
            "required": true,
            "name": "user_id",
            "type": "string"
          },
          {
            "in": "path",
            "required": true,
            "name": "lang_id",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Returns message summary according to criteria",
            "schema": {
              "items": {
                "properties": {
                  "campaignId": {
                    "type": "string"
                  },
                  "clientName": {
                    "type": "string"
                  },
                  "footer": {
                    "type": "string"
                  },
                  "id": {
                    "type": "string"
                  },
                  "isNew": {
                    "type": "boolean"
                  },
                  "jobNumber": {
                    "type": "string"
                  },
                  "piLink": {
                    "type": "string"
                  },
                  "repId": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "title",
                  "summary",
                  "isNew",
                  "footer",
                  "jobNumber",
                  "clientName",
                  "piLink",
                  "repId",
                  "campaignId"
                ],
                "type": "object"
              }
            }
          },
          "401": {
            "description": "unauthorised"
          },
          "404": {
            "description": "client not found"
          },
          "default": {
            "description": "generic error response",
            "schema": {
              "items": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
4

1 回答 1

1

您可以尝试:

"200": { "description": "get client", "schema": { "items": { "$ref": "#/definitions/client" } }

ref 确保重复使用相同的类型,而不是因为匿名定义而生成新的类型。

于 2016-10-09T07:32:53.303 回答