Ich lerne, wie man Retrofit2
benutzt, aber ich bin in Schwierigkeiten.Ausnahmebehandlung mit Retrofit2
Ist das eine Möglichkeit, das Response
Objekt auf retrofit2.Retrofit
zu fangen und eine Ausnahme auszulösen, wenn der HTTP-Antwortcode außerhalb des Bereichs 2xx liegt?
ich einige JAX-RS Rest Dienstleistungen bin der Umsetzung, wo meine Ruhe Methoden einen anderen Rest APIs aufrufen, Informationen zu sammeln, und ich möchte alle HTTP-Fehler auf der JAX-RS Seite zu handhaben:
public class HelloRest {
@GET("/ping")
public String ping() throws IOException {
HelloService client = HelloServiceBuilder.getInstance();
String response = client.sayHello().execute().body();
LOGGER.info(response);
}
@GET ("echo/{msg}")
public String echo(@PathParam("msg") String msg) throws IOException {
HelloService client = HelloServiceBuilder.getInstance();
String response = client.echo(msg).execute().body();
LOGGER.info(response);
return response;
}
}
Zuerst habe ich habe festgestellt, dass die execute()
Methode IOException wirft, so dass ich es zu den Restmethoden Signaturen hinzufügen musste. Das ist in Ordnung, ich kann es mit JAX-RS richtig handhaben.
Aber was ist der beste Weg, um Fehler zu behandeln, die HTTP-Antworten betrifft, wo der Antwortcode außerhalb des Bereichs 2xx ist?
Ich will nicht wiederholt Code-Block schreiben, den HTTP-Response-Code jederzeit zu überprüfen, wenn ich Retrofit2 wie folgt verwenden:
Response<String> response = client.ping().execute();
int responseCode = response.code();
if (responseCode < 200 && responseCode > 299) {
throws AnyException("...");
}
String serverResponse = response.body();
...
Kann ich etwas zu dem Retrofit.Builder()
Codeblock hinzufügen, um diese Situation auf einem zu handhaben allgemeiner Weg irgendwie?
public final class HelloServiceBuilder {
private static final String SERVICE_URL = "...";
private HelloServiceBuilder() {
// do nothing
}
public static HelloService getInstance() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SERVICE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.HOW-TO-CHECK-RESPONSES-HERE?
.build();
return retrofit.create(HelloService.class);
}
}