V. Les Exceptions▲
V-A. Le Status Code d'une requête HTTP▲
Le protocole HTTP fournit une liste de codes déclinés en quatre catégories :
- 2xx : succès de la requête ;
- 3xx : redirection de la requête ;
- 4xx : la requête envoyée pose problème ;
- 5xx : le serveur a rencontré un problème, alors que la requête est sans doute valable.
Beaucoup de codes semblent obsolètes, cependant la panoplie des erreurs 4xx doit être pleinement utilisée afin de renseigner l'utilisateur sur les corrections qu'il peut apporter à sa requête.
Évitez simplement de toujours renvoyer 400 ou 500. Il est également possible de spécifier soi-même ses status codes si cela vous semble nécessaire, en utilisant par exemple la partie 550-580 pour exprimer les erreurs envisageables dans votre code.
V-B. Les Exceptions dans les Webs Services▲
Vous avez pu remarquer que mon code dans les fonctions du Web Service est toujours similaire :
@METHOD
@Produces
(
"application/xml"
)
public
Response function
(
) {
try
{
//Appel vers les classes Business, qui lancent des exceptions
return
classicSuccess
(
);//ou return getResponse(xml) si du XML spécifique est produit
}
catch
(
Exception ex) {
//Renvoi de l'erreur - Il est également intéressant de logger cette erreur
return
classicFailure
(
ex);
}
}
}
C'est la partie Business qui lance l'exception, la partie JAX-RS ne fait que mettre en forme. La fonction classicFailure() va donc chercher le meilleur message et code correspondant à l'exception lancée. Cela sera plus précis si vous avez lancé une RestException.
V-C. La classe RestException et ses dérivés▲
Les RestException sont des classes dérivant de Exception et ayant les méthodes :
public
int
getStatusCode
(
);
public
void
setStatusCode
(
int
statusCode);
public
String getClassicResponse
(
);
public
String getClassicResponse
(
String message);
Les RestExceptions permettent donc d'automatiser la réponse.