loopbackio / loopbackio/loopback-next

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

Abierto
#7,777 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug OpenAPI REST
Lenguaje dominante
TypeScript
Estrellas
5.1k
Forks
1.1k
Merge medio
2 d 21 h
PR fusionados (30 d)
27

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la reproducción de una solicitud GET usando @param.array con type: 'object', y luego inspecciona openapi-v3/../parameter.decorator.ts y coerce-parameter.ts para entender cómo se selecciona el contenido JSON. Está terminado cuando se analiza cada cadena de objeto JSON del array, de modo que la solicitud ya no falla con una respuesta 400.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
api
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.