loopbackio / loopbackio/loopback-next

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

Ouverte
#7,777 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug OpenAPI REST
Langage dominant
TypeScript
Étoiles
5.1k
Forks
1.1k
Merge moyen
2 j 21 h
PR mergées (30 j)
27

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire une requête GET utilisant @param.array avec type: 'object', puis examinez openapi-v3/../parameter.decorator.ts et coerce-parameter.ts pour comprendre comment le contenu JSON est sélectionné. C’est terminé lorsque chaque chaîne représentant un objet JSON dans le tableau est analysée, afin que la requête n’échoue plus avec une réponse 400.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
api
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.