Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[BUG][Javascript] paramToString does not handle non-primitives #7171

Closed
tray2100 opened this issue Aug 9, 2020 · 0 comments
Closed

[BUG][Javascript] paramToString does not handle non-primitives #7171

tray2100 opened this issue Aug 9, 2020 · 0 comments

Comments

@tray2100
Copy link
Contributor

tray2100 commented Aug 9, 2020

Description

It looks like the when an API call is being constructed, the params are passed through a generic paramToString function defined here that looks like this:

exports.prototype.paramToString = function (param) {
    if (param == undefined || param == null) {
      return '';
    }
    if (param instanceof Date) {
      return param.toJSON();
    }
    return param.toString();
  };

This breaks if any of your parameters are not primitives because param.toString() will transform it into [object Object].

openapi-generator version

4.3.1 ... doesn't look to be a regression. Just missing handling

OpenAPI declaration file content or url
  /someOperation:
    post:
      requestBody:
        description: "POST request that uploads a file and takes in a metadata object"
        content:
          multipart/form-data:
            schema:
              type: "object"
              properties:
                metadata:
                  $ref: "#/components/schemas/SomeType"
                file:
                  format: "binary"
                  type: "string"
            encoding:
              metadata:
                contentType: "application/json"
Steps to reproduce

Invoke any POST operation where one parameter is a complex type (Object) using this client and the service will receive [object Object] as a value for the parameter.

Related issues/PRs

Similar issues:

Suggest a fix

I believe the fix should be to, as a last step, see if the parameter can be JSON-ified. If it can be, we should run JSON.stringify() on it and use that result instead of the output of param.toString(). I think a simple method like this would suffice:

exports.prototype.canBeJsonified = function(str) {
    if (typeof str !== 'string' && typeof str !== 'object') return false;
    try {
      const type = str.toString();
      return type === '[object Object]'
          || type === '[object Array]';
    } catch (err) {
      return false;
    }
  };

and we update the paramToString method to be

exports.prototype.paramToString = function(param) {
    if (param == undefined || param == null) {
      return '';
    }
    if (param instanceof Date) {
      return param.toJSON();
    }
    if (this.canBeJsonified(param)) {
      return JSON.stringify(param);
    }
    return param.toString();
  };

cc @CodeNinjai @frol @cliffano @wing328

tray2100 added a commit to tray2100/openapi-generator that referenced this issue Aug 10, 2020
@wing328 wing328 closed this as completed Aug 10, 2020
jimschubert added a commit that referenced this issue Aug 12, 2020
* master: (27 commits)
  [WIP][python-exp] Force camelization of imports (#7186)
  Fixes #6942: Added ability to prepend a basePath to typescript-redux-query generators (#6943)
  [Typescript] Import path is invalid in windows. (#7175)
  Fix JaxRS Spec generator additional model types (#7180)
  [python{,-experimental}] Obey floating point timeouts provided to RESTClientObject.request(...) (#7154)
  [C#] Switch the spec to OAS v3 from v2 (#7176)
  [Javascript] Fixing the handling of non primitive types in paramToString (#7171) (#7172)
  [typescript-node] Fix invalid type when using node@10 and ES5 (#7133)
  Minor fix to github workflow badge
  [gradle] Enabling up-to-date checks and gradle caching for openapigenerator tasks (#6716)
  feat(csharp-netcore): Adding response headers to the ApiException (#7169)
  [ci] Verify supported JDK versions on master push (#7085)
  Issue #6830: Java server - Add getter to ApiException templates (#7150)
  update kotlin samples
  [Kotlin] Make ApiClient in jvm-retrofit2 be able to use own OkHttpClient (#6999)
  Sttp - wrap query params (#6884)
  Add a link to https://medium.com/@everisBrasil blog post (#7160)
  [C#][netcore] fix regular expression when it contains double quotes (#7147)
  remove duplicated cancellationToken in comment (#7148)
  update samples
  ...
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

2 participants