loopback-next icon indicating copy to clipboard operation
loopback-next copied to clipboard

@param.array {type: 'object'} throws 400

Open kyle-apex opened this issue 2 years ago • 1 comments

Steps to reproduce

In explorer, make a GET request to a controller that has an array of type: 'object': @param.array('objectArray', 'query', {type: 'object'})

Current Behavior

When making a GET request to a controller with an array of objects parameter @param.array('objectArray', 'query', {type: 'object'}), it will throw a 400 [{path: "/0", code: "type", message: "must be object", info: {type: "object"}}] because it doesn't parse the JSON string.

Example: /getWithObjectArray?objectArray=%7B%22name%22%3A%22hello%22%7D essentially parses to: ['{"name":"hello"}']

Expected Behavior

The request should parse the json string in each array item so the request does not fail.

Link to reproduction sandbox

Added a test to show it broken: https://github.com/kyle-apex/loopback-next/commit/3d9d8e602f8a747e63ced1cf443f92a59998f35f

Added some code to show it "fixed": https://github.com/kyle-apex/loopback-next/commit/0a69964708fe2f135acd47900d86636dc199a515

My "fix" may be too broad. In openapi-v3/../parameter.decorator.ts, @param.query.param forces content: { 'application/json': { schema, }, } so coerce-parameter.ts knows to parse the JSON. @param.array doesn't have a similar capability, so it's tough for coerce-parameter.ts to know if it should parse the object represented as a string as JSON or not.

Any ideas for best approach?

Additional information

darwin x64 12.18.1

kyle-apex avatar Aug 19 '21 20:08 kyle-apex

Any updates on this issue ?

dVp007 avatar Mar 17 '22 10:03 dVp007