Ho un semplice client utilizzando RESTEasy come segue:RESTEasy Exception Handling client
public class Test {
public static void main(String[] args) {
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://localhost");
client.register(new MyMapper());
MyProxy proxy = target.proxy(MyProxy.class);
String r = proxy.getTest();
}
}
public interface MyProxy {
@GET
@Path("test")
String getTest();
}
@Provider
public class MyMapper implements ClientExceptionMapper<BadRequestException>{
@Override
public RuntimeException toException(BadRequestException arg0) {
// TODO Auto-generated method stub
System.out.println("mapped a bad request exception");
return null;
}
}
Il server è configurato per restituire un 400 - Bad Request
su http://localhost/test
insieme a un messaggio utile. Un BadRequestException
viene lanciato da ClientProxy
. A parte il wrapping in try/catch
, come posso rendere getTest()
catturare l'eccezione e restituire il messaggio utile della risposta come una stringa. Ho provato varie implementazioni di ClientExceptionMapper
, ma sembra che riesca a farlo bene. Il codice precedente non chiama mai toException
. Cosa mi manca qui?
La mia soluzione attuale consiste nell'utilizzare un ClientResponseFilter
e quindi fare un setStatus(200)
e inserire lo stato originale nell'entità di risposta. In questo modo evito i lanci delle eccezioni.
Puoi spiegare cosa intendi con "Il server è configurato per restituire 400 - Richiesta non valida"? Il mio pensiero è che l'implementazione di 'MyProxy.getTest()' dovrebbe effettivamente generare un'eccezione che contiene un messaggio utile. Quindi dovresti utilizzare un ExceptionMapper per mappare quell'eccezione a una risposta 400 - Richiesta non valida (e potresti includere il messaggio come corpo della risposta). – FGreg
Leggi la prima frase della mia domanda. Sto scrivendo un client, non il server. – gogators