web-dev-qa-db-fra.com

Comment enregistrer le corps de la demande dans le client JAX-RS

J'ai besoin de voir mon corps de requête avec une requête client JAX-RS afin de vérifier que la sérialisation fonctionne correctement et de réutiliser la requête pour des clients de test comme Postman .

Je sais qu'il est possible d'activer la journalisation avec Jersey en utilisant par exemple resource.addFilter(new com.Sun.jersey.api.client.filter.LoggingFilter());. Cependant, je n'utilise pas directement l'implémentation de Jersey ou RESTEasy, mais abstraite via l'API JAX-RS:

final WebTarget target = 
        ClientBuilder.newBuilder().build().target("http://localhost:8080");

Comment puis-je activer la journalisation ici?


Résultat

La réponse de @peeskillet + cet extrait .

Cependant, la méthode close() de l'extrait n'est parfois pas invoquée par l'implémentation JAX-RS (org.jboss.resteasy:resteasy-client-3.0.11.FINAL Dans ce cas).

14
thomas.mc.work

JAX-RS 2.0 (qui ressemble à ce que vous utilisez), a le ClientRequestFilter . Vous pouvez l'enregistrer avec le Client ou même le WebTarget. À partir de la méthode filter, vous pouvez obtenir l'entité et faire votre journalisation

public class LoggingFilter implements ClientRequestFilter {
    private static final Logger LOG = Logger.getLogger(LoggingFilter.class.getName());

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        LOG.log(Level.INFO, requestContext.getEntity().toString());
    }
}

[...]

Client client = ClientBuilder.newClient();
client.register(new LoggingFilter());

Aussi l'API ClientRequestContext pour d'autres goodies que vous pourriez trouver intéressants.

MISE À JOUR

Voir aussi:

23
Paul Samsotha