13.9. Intercepteurs RESTEasy
13.9.1. Interception des invocations JAX-RS Copier lienLien copié sur presse-papiers!
RESTEasy peut intercepter les invocations JAX-RS et les re-router vers des objets style listener que l'on appelle des intercepteurs. Cette section couvre les descriptions de quatre types d'intercepteurs.
Exemple 13.3. Intercepteurs MessageBodyReader/Writer
@Provider
, ainsi que par @ServerInterceptor
ou @ClientInterceptor
, de façon à ce que RESTEasy sache s'il doit les ajouter ou non à la liste d'intercepteurs.
MessageBodyReader.readFrom()
ou de MessageBodyWriter.writeTo()
. Ils peuvent être utilisés pour encapsuler les flux d'entrée ou de sortie.
MessageBodyReaderContext.proceed()
ou MessageBodyWriterContext.proceed()
est appelé pour aller vers le prochain intercepteur, ou, s'il n'y a plus d'intercepteur à invoquer, la méthode readFrom()
ou writeTo()
du MessageBodyReader ou du MessageBodyWriter. Cette encapsulation permet aux objets d'être modifiés avant d'aller vers le Reader ou Writer, puis d'être nettoyés, après proceed()
.
Exemple 13.4. PreProcessInterceptor
public interface PreProcessInterceptor { ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException; }
public interface PreProcessInterceptor
{
ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException;
}
preProcess()
renvoie une ServerResponse, alors la méthode JAX-RS sous-jacente ne sera pas invoquée, et le runtime traitera la réponse et retournera au client. Si la méthode preProcess()
ne renvoie pas une ServerResponse, la méthode JAX-RS sous-jacente sera alors invoquée.
Exemple 13.5. PostProcessInterceptors
public interface PostProcessInterceptor { void postProcess(ServerResponse response); }
public interface PostProcessInterceptor
{
void postProcess(ServerResponse response);
}
Exemple 13.6. ClientExecutionInterceptors
@ClientInterceptor
et @Provider
. Ces intercepteurs sont exécutés après que le MessageBodyWriter, et que le ClientRequest aient été créés côté client.