loopback-next
loopback-next copied to clipboard
@param.array {type: 'object'} throws 400
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
Any updates on this issue ?