loopbackio / loopbackio/loopback-next
@param.array throws INVALID_PARAMETER_VALUE:must be string if more than 20 elements are sent
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 5.1k
- Forks
- 1.1k
- Ø Merge
- 2 T. 21 Std.
- Gemergte PRs (30 T.)
- 27
Beschreibung
Describe the bug
Hello, I have an LB application running correctly in prod for couple years. I used LB4 CLI update command in my test environment, and now I'm getting INVALID_PARAMETER_VALUE:must be string error code for a REST request -that works fine in prod- when sending more than 20 values on a @param.array query param.
I assume its handled by @loopback/rest. If so, prod has v12 and my test environment v15.0.9.
1.- How to reproduce:
Having the following code in my controller:
@param({
name: 'vendorNumbers', in: 'query', schema: { type: 'array', items: { type: 'string' } }
}) vendorNumbers: string[],`
and calling
http://{url}/queries/selectShipments?vendorNumbers=1000294151&vendorNumbers=1000486268&vendorNumbers=1000107612&vendorNumbers=1000433151&vendorNumbers=1000353795&vendorNumbers=1000059059&vendorNumbers=1000046043&vendorNumbers=1000328740&vendorNumbers=1000353800&vendorNumbers=1000254679&vendorNumbers=1000468101&vendorNumbers=1000493680&vendorNumbers=1000483049&vendorNumbers=1000479051&vendorNumbers=1000346467&vendorNumbers=1000478186&vendorNumbers=1000428780&vendorNumbers=1000064789&vendorNumbers=1000411703&vendorNumbers=1000120574&vendorNumbers=1000056801
I get the following error:
{
"error": {
"statusCode": 400,
"name": "BadRequestError",
"message": "Invalid data [{\"0\":\"1000294151\",\"1\":\"1000486268\",\"2\":\"1000107612\",\"3\":\"1000433151\",\"4\":\"1000353795\",\"5\":\"1000059059\",\"6\":\"1000046043\",\"7\":\"1000328740\",\"8\":\"1000353800\",\"9\":\"1000254679\",\"10\":\"1000468101\",\"11\":\"1000493680\",\"12\":\"1000483049\",\"13\":\"1000479051\",\"14\":\"1000346467\",\"15\":\"1000478186\",\"16\":\"1000428780\",\"17\":\"1000064789\",\"18\":\"1000411703\",\"19\":\"1000120574\",\"20\":\"1000056801\"}] for parameter \"vendorNumbers\".",
"code": "INVALID_PARAMETER_VALUE",
"details": [
{
"path": "/0",
"code": "type",
"message": "must be string",
"info": {
"type": "string"
}
}
]
}
}
Have in mind that:
- if I send less than 20, works fine.
- it is not related to query length nor number of other params, cause I already tried with different lengths and number of 'other' parameters.
- If I add
maxItemsof 30, I still getINVALID_PARAMETER_VALUE:must be stringwhen sending more than 20 values. - During one of my tests, I set
maxItemsat 10, and the error changed to INVALID_PARAMETER_VALUE:must NOT have more than 10 items
Thanks
Logs
Additional information
No response
Reproduction
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne beim Pfad für das Parsen und Validieren von Query-Parametern in @loopback/rest und vergleiche das gemeldete Verhalten in v12 mit v15.0.9. Reproduziere die Anfrage mit den 21 gezeigten wiederholten vendorNumbers-Werten und überprüfe anschließend, warum Werte über 20 hinaus fälschlicherweise behandelt werden, während die maxItems-Validierung weiterhin funktioniert. Erledigt ist die Aufgabe, wenn Arrays mit mehr als 20 Elementen als Strings validiert werden, ohne dass maxItems-Fehler zurückgehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- api, backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100