我正在大摇大摆的主人https://github.com/go-swagger/go-swagger/commit/3981236c3f6bd9eabb26f14e9d31b853d340405f
不确定这是一个问题,还是我不了解。我有一个healthcheck方法,默认情况下返回状态500以及模型中定义的errorMessage对象。但是,WithPayload方法采用GetHealthcheckDefaultBodyBody类型。这里不是一个大问题,因为我可以创建其中一个,但是我需要返回模型类型的数组,我最终会编写大量的样板来映射从模型类型到BodyBody类型,EG
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"
}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:0)
您可以尝试:
"200": {
"description": "get client",
"schema": {
"items": {
"$ref": "#/definitions/client"
}
}
由于匿名定义,ref确保重用相同类型而不是生成新类型。