Aller au contenu principal

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 un UUID 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 nom error-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 en camelCase.
{
"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 un UUID 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 nom error-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"
}
]
}

Voir la FQR