2014-04-07 7 views
6

Sto utilizzando il client JAX-RS per consumare API REST. Non volevo permettere a JAX-RS di fare un sacco di eccezioni, quindi sto ispezionando l'oggetto Response da solo. A volte però, mi interessa solo certe codici di stato e vorrei JAX-RS a caduta di nuovo al comportamento predefinito e un'eccezione reale (che sarà gestita da un consiglio AOP). C'è un modo semplice per farlo?JAX-RS: conversione risposta a eccezione

public void delete(long id) { 
    Response response = client.delete(id); 
    Response.Status status = Response.Status.fromStatusCode(response.getStatus()); 

    if (status == Response.Status.OK) { 
     return; 
    } 
    if (status == Response.Status.NOT_FOUND) { 
     throw new TeamNotFoundException(); 
    } 
    if (status == Response.Status.CONFLICT) { 
     throw new TeamHasAssignedUsersException(); 
    } 

    // if status was internal server error or something similar, 
    // throw whatever exception you would throw at first place 
    // magic.throwException(response) 
} 
+0

Quando non si ottiene oggetto Response da JAX-RS API, si getterà mucchio di eccezioni come BadRequestException, ClientErrorException ecc, ma non mi piace guidare la mia logica di business con le eccezioni – Xorty

+0

Vuoi dire che quando si fanno una richiesta con TypedEntity come 'client.get (Customer.class)', quindi ottieni quelle eccezioni, e in caso contrario quando lavori direttamente con un 'Response' - no? –

+0

Sì, questo è ... – Xorty

risposta

4

Non c'è supporto nell'API JAX-RS per la traduzione di una risposta a un'eccezione. Se controlli il metodo JerseyInvocation.convertToException(), vedrai che in Jersey è un semplice interruttore che traduce lo stato Response nell'eccezione corrispondente.

Quindi, si hanno due opzioni qui:

  1. o si chiamano webTarget.get(MyEntity.class) se ci si aspetta un corpo dell'entità. Naturalmente puoi prendere tutto lo WebApplicationException in una singola clausola catch, poiché tutte le eccezioni lo estendono (ad esempio, controlla BadRequestException).
  2. o si fa una clausola switch simile nel codice, come fatto in jersey.