go-openapi CSVProducer 返回“数据类型必须是字节数组”错误

问题描述 投票:0回答:1

我制作了一个 swagger 2.0 规范端点来生成 CSV 格式的响应:

  /query/csv:
    post:
      summary: Execute query and return response in CSV format
      description: Executes query and returns response in CSV format
      tags:
        - Query
      produces:
        - "text/csv"
      
      ...

      responses:
        200:
          description: "OK"
          schema:
            type: string
          headers:
            Content-Disposition:
              type: string
              description: A header specifying the file name
        400:
          description: "Bad request"
        500:
          description: "Internal error during request processing"

我在生成代码时使用 quay.io/goswagger/swagger:v0.25.0 图像:

docker run --rm -v $(PWD):/axxondatago -w /axxondatago -t $(SWAGGER_IMAGE) \
        generate server \
        --target=internal/app/query/rest \
        --exclude-main \
        -f api/openapi-spec/query.swagger.yml

在代码生成阶段之后,我获取查询响应的字符串有效负载类型:

...
return queryRest.NewExecuteQueryCSVOK().WithPayload(buffer) // var buffer string

但是 CSVProducer 期望类型转换的字节切片 https://github.com/go-openapi/runtime/blob/1ade6d4fa0ddfcfdcad57761eed3588b40cf41ae/csv.go#L58 并返回错误:

// CSVProducer creates a new CSV producer
func CSVProducer() Producer {
    return ProducerFunc(func(writer io.Writer, data interface{}) error {
        if writer == nil {
            return errors.New("CSVProducer requires a writer")
        }

        dataBytes, ok := data.([]byte)
        if !ok {
            return errors.New("data type must be byte array")
        }

我在端点的架构部分尝试了不同的字符串格式,例如“字节”、“二进制”和类型“文件”,但没有获得响应的字节切片。

我应该在架构中使用哪些类型和格式才能使 CSVProducer 正常工作?

csv go openapi swagger-2.0 go-swagger
1个回答
0
投票

像这样定义响应模式为我解决了这个问题

type: array
items:
  type: number
  format: uint8
© www.soinside.com 2019 - 2024. All rights reserved.