2013-03-03 14 views
7

Sto utilizzando questo codice per invocare un servizio JAX-RS jersey utilizzando un client jersey.Maglia JAX-RS Client: lettura della risposta con codice di stato

public static void main(String[] args) { 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 

    WebResource service = client.resource(getBaseURI()); 

    String msg = service.path("rest").path("ExceptionDemo").path("user").queryParam("id", "001").get(String.class);  
    System.out.println(msg); 

} 

private static URI getBaseURI() { 
    return UriBuilder.fromUri("http://localhost:8045/ExceptionHanlding").build(); 
} 

Questo codice funziona bene quando il codice di stato di risposta è 200. Ma per qualcosa di diverso da 200, questo codice genera un'eccezione.

Come modificare questo codice in modo che in base al codice di stato della risposta esegua qualche azione?

risposta

12

Utilizzare .get(ClientResponse.class) anziché .get(String.class). Questo sopprime il comportamento di "eccezione sul cattivo stato" e lo ClientResponse ti dà accesso ai dettagli sulla risposta HTTP. Il comportamento è brevemente descritto nella guida per l'utente sotto "Receiving a response".

+0

Grazie per la risposta, ha risolto il mio problema. Posso vedere nel link che non stanno usando questo: 'EntityTag e = response.getEntityTag();'. A che cosa serve? – WhoAmI

+0

In breve, un tag di entità identifica in modo univoco o quasi unico un corpo di risposta per consentire una memorizzazione nella cache migliore. Maggiori informazioni nella [specifica HTTP] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11) o su [Wikipedia] (http://en.wikipedia.org/wiki/HTTP_ETag). –

Problemi correlati