Manweill / swagger-axios-codegen

swagger client to use axios and typescript
MIT License
306 stars 83 forks source link

几个问题, #193

Closed xxbld closed 6 months ago

xxbld commented 7 months ago
  1. getResponseType.ts line 18: content不一定是['application/json'] 我遇到的是['/']
    //修改为遍历到有schema,就算匹配到了 
    if (reqProps.responses[successStatusCode].content) {
        const content = reqProps.responses[successStatusCode].content
        Object.keys(content).forEach((key) => {
          if (content[key].schema) {
            resSchema = content[key].schema
          }
        })
      }
  2. src\requestCodegen\index.ts line 82 mapFormDataToV2 在openapi3 里含form-data的情况下会有异常。
    //建议在 V3时不调用
    if (multipartDataProperties&&!isV3) {
  3. openapi3 Java的后台好像是没有泛型了PageResult《SysConfig》 直接变成PageResultSysConfig了是不是没配置好,这样冗余代码比较多
Manweill commented 6 months ago

1、走 fetch 一般来说都要定义为application/json的,其他情况通常需要自定义调用,不然生成器要处理的情况有点多。当然可以做个自适应的修改。 2、这个情况,我还没遇到过,你有定义好的 spec.json的例子给我参考吗 3、这个没看太懂。如果缺少类型的话,可以用自定义拓展文件来补充。类型的话,定义多少都没影响的。

xxbld commented 6 months ago
"/admin/api/v1/oss/files": {
      "post": {
        "tags": [
          "admin-oss-upload-download-controller"
        ],
        "summary": "上传文件",
        "operationId": "uploadUsingPOST",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "file"
                ],
                "type": "object",
                "properties": {
                  "attr": {
                    "description": "attr",
                    "$ref": "#/components/schemas/UploadFileAttributeDTO"
                  },
                  "file": {
                    "type": "string",
                    "description": "file",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResult«OssFileUploadResultVO»"
                }
              }
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "security": [
          {
            "Authorization": [
              "global"
            ]
          }
        ],
        "extensions": {
          "x-order": "2147483647"
        }
      }
    },

image

  1. mapFormDataToV2 处理了这个就报错了,不清楚是不是后台不规范的问题,
Manweill commented 6 months ago

我用你这个内容去升成,看着挺正常的,在我补充完你这个 type 之后。 这个getRequestParamters报错,是因为你确实少了类型,在 attr 这个参数那里。

export class AdminOssUploadDownloadControllerService {
  /**
   * 上传文件
   */
  static files(
    params: {
      /**  */
      attr: [];
      /**  */
      file: any;
    } = {} as any,
    options: IRequestOptions = {}
  ): Promise<any> {
    return new Promise((resolve, reject) => {
      let url = basePath + '/admin/api/v1/oss/files';

      const configs: IRequestConfig = getConfigs('post', 'multipart/form-data', url, options);

      let data = null;
      data = new FormData();
      if (params['attr']) {
        if (Object.prototype.toString.call(params['attr']) === '[object Array]') {
          for (const item of params['attr']) {
            data.append('attr', item as any);
          }
        } else {
          data.append('attr', params['attr'] as any);
        }
      }

      if (params['file']) {
        if (Object.prototype.toString.call(params['file']) === '[object Array]') {
          for (const item of params['file']) {
            data.append('file', item as any);
          }
        } else {
          data.append('file', params['file'] as any);
        }
      }

      configs.data = data;

      axios(configs, resolve, reject);
    });
  }
}
xxbld commented 6 months ago

哦,那应该是后端没搞好类型。 "$ref": "#/components/schemas/ApiResult«OssFileUploadResultVO»" 这种泛型在后端是怎么配置出来的,有的项目返回的又是这样的 "$ref": "#/components/schemas/ResponseResultListSysMenu" 本来应该是 ResponseResult<List> 后端的代码是都是正确的泛型返回

Manweill commented 6 months ago

泛型这个,不同的语言都有不同,具体要后台的自己查过才知道。我自己只对 JS 和 C#的比较熟悉。如果找到对应的规律,都可以往上面加规则