Client Mam prosty klient korzystając RESTEasy następująco:RESTEasy Exception Handling
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;
}
}
Serwer jest skonfigurowany tak, aby zwrócić na http://localhost/test
400 - Bad Request
wraz z pomocnym wiadomości. A BadRequestException
jest wyrzucane przez ClientProxy
. Oprócz pakowania w try/catch
, jak mogę uczynić getTest()
wychwycić wyjątek i zwrócić pomocny komunikat Response jako ciąg. Próbowałem różnych implementacji ClientExceptionMapper
, ale wydaje mi się, że to dobrze. Powyższy kod nigdy nie wywołuje toException
. Czego tu mi brakuje?
Moja obecna praca polega na użyciu ClientResponseFilter
, a następnie zrobienia setStatus(200)
i nadania oryginalnego statusu w jednostce odpowiedzi. W ten sposób unikam rzucania wyjątków.
Czy możesz wyjaśnić, co masz na myśli przez "Serwer jest skonfigurowany do zwracania 400 - Bad Request"? Moim zdaniem jest to, że implementacja 'MyProxy.getTest()' powinna w rzeczywistości rzucić wyjątek, który zawiera pomocną wiadomość. Następnie należy użyć ExceptionMapper, aby odwzorować ten wyjątek na odpowiedź 400 - Bad Request (można dołączyć wiadomość jako treść odpowiedzi). – FGreg
Przeczytaj pierwsze zdanie mojego pytania. Piszę klienta, a nie serwer. – gogators