2014-04-07 8 views
6

Ich verwende JAX-RS-Client, um REST-API zu konsumieren. Ich wollte nicht zulassen, dass JAX-RS eine Reihe von Ausnahmen auslöst, also untersuche ich selbst das Objekt Response. Manchmal aber interessiere ich mich nur über bestimmte Statuscodes und ich möchte JAX-RS zu auf Standardverhalten zurückfallen und eine tatsächliche Ausnahme werfen (die von einem AOP-Ratschlag behandelt wird). Gibt es eine einfache Möglichkeit, dies zu tun?JAX-RS: Antwort auf Ausnahme konvertieren

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

Wenn Sie nicht Response-Objekt von JAX-RS-API bekommen, wird es Haufen von Ausnahmen wie BadRequestException, ClientErrorException usw. werfen Aber Ich mag nicht meine Business-Logik mit Ausnahmen fahren – Xorty

+0

Sie meinen, wenn Sie machen eine Anfrage mit einer TypeEntity wie 'client.get (Customer.class)', dann bekommst du diese Ausnahmen, und ansonsten wenn du direkt mit einer 'Response' arbeitest - nicht? –

+0

Ja, das ist es ... – Xorty

Antwort

4

Es gibt keine Unterstützung in der JAX-RS-API zum Übersetzen einer Antwort auf eine Ausnahme. Wenn Sie die JerseyInvocation.convertToException() Methode überprüfen, werden Sie sehen, dass es in Jersey ein einfacher Schalter ist, der den Response Status in die entsprechende Ausnahme übersetzt.

So haben Sie zwei Möglichkeiten:

  1. entweder rufen Sie webTarget.get(MyEntity.class) wenn Sie eine Entität Körper erwarten. Natürlich können Sie alle WebApplicationException in einer einzigen Fangklausel fangen, da alle Ausnahmen es erweitern (z. B. prüfen Sie BadRequestException).
  2. oder Sie machen ähnliche Schalterklausel in Ihrem Code, wie Jersey gemacht.
Verwandte Themen