Aspect selon valeur retournée
Bonjour.
J'ai une application qui fait appel à une API externe PersonAPI de cette façon :
Code:
1 2 3 4 5 6 7 8 9 10
| public void modifierPersonne() {
//Traider input
PersonDto output = personApi.modify(input);
//Traiter output
}
public void creerPersonne() {
//Traider input
PersonDto output = personApi.create(input);
//Traiter output
} |
L'API retourne ce genre de JSON :
Code:
1 2 3 4 5 6 7
| {
code: 200,
messages: [],
data: {
person: {name: "name", age: 100, ...}
}
} |
Problème, la gestion des erreurs est mal conçue et l'API peut retourner un code HTTP 200 avec des données tel que :
Code:
1 2 3 4 5 6 7 8 9 10
| {
code: 400,
messages: [
severity: "ERROR",
content: "Invalid character in 'name'"
],
data: {
person: {name: "א", age: 100, ...}
}
} |
Ce comportement ne pouvant pas changer, je souhaite m'adapter, mais si possible sans toucher au code existant (base de code assez grande).
Les Aspects semblent être une bonne solution, j'en utilise déjà pour log des appels de fonctions très précises.
Je pense intercepter les données de retour et envoyer une exception si le champ severity est "ERROR".
Je voudrais savoir si il est possible d'intercepter le processus juste après que la fonction ait retourné le JSON (retour de personApi.create()) mais avant que la valeur soit assignée à p output ?
Sinon si il y existe une option plus pertinente ?