VascoBadRequestException
Une Bad Request peut être retournée de plusieurs façons (on gère ces deux exceptions dans le GlobalExceptionHandler
) :
- suite aux validations de surface Spring (avec l'annotation
@Valid
) - manuellement par le développeur lors d'un contrôle plus profond (type métier) en lançant une exception
VascoBadRequestException
.
Format
- Ajout d'un champ
invalid-params
au niveau de la racine de l'objet de retour. Ce champ est spécifique à une Bad Request
Exemple :
invalid-params": [
{ "name": "date",
"value": "2023-06-29",
"reason": "doit être une date dans le présent ou le futur"
}, // ... autres erreurs en entrée
]
- logs de niveau warning côté back-end pour ces erreurs
- le
GlobalExceptionHandler
génère unUUID
technique permettant de retrouver l'erreur spécifique dans les logs (il sera envoyé au niveau de la racine de l'objet de retour sous le nomerror-id
)
Exemple final d'un retour (pas de champ context
):
{
"title": "Bad request",
"code": "generic-400",
"detail": "La requête contient des éléments invalides.",
"error-id": "b6199b12-cab8-4c3c-932d-802047bec0f0",
"instance": "/api/typologies/6/ouvrir",
"invalid-params": [
{
"name": "date",
"value": "2023-06-29",
"reason": "doit être une date dans le présent ou le futur"
},
{
"name": "reason",
"value": "",
"reason": "ne doit pas être vide"
}
]
}
- Lors d'un retour d'un contrôle de surface (ex: champ au mauvais format), le retour est en
kebab-case
, le nom du champ en entrée qui est en erreur reste encamelCase
.
{
"title": "Requête invalide.",
"code": "generic-400",
"detail": "La requête contient des éléments invalides.",
"instance": "/typologies/1/viseurs",
"error-id": "ce7cb71f-4bd9-4d97-b271-3062e1d8eb1e",
"invalid-params": [
{
"name": "approvalRequired", <-- nom du champ en entrée
"reason": "ne doit pas être nul"
}
]
}
- logs de niveau warning côté back-end pour ces erreurs
- le
GlobalExceptionHandler
génère unUUID
technique permettant de retrouver l'erreur spécifique dans les logs (il sera envoyé au niveau de la racine de l'objet de retour sous le nomerror-id
)
Exemple final d'un retour (pas de champ context
):
{
"title": "Bad request",
"code": "generic-400",
"detail": "La requête contient des éléments invalides.",
"error-id": "b6199b12-cab8-4c3c-932d-802047bec0f0",
"instance": "/api/typologies/6/ouvrir",
"invalid-params": [
{
"name": "date",
"value": "2023-06-29",
"reason": "doit être une date dans le présent ou le futur"
},
{
"name": "reason",
"value": "",
"reason": "ne doit pas être vide"
}
]
}