У меня есть исключение, которое я выбрал с серверной стороны, которую я хочу поймать на стороне клиента. Исключение должно быть отправлено через REST с использованием Jersey. Это то, что я до сих пор:Исключение выхвата остатка на клиенте
Определить мое исключение:
public class MyException extends Exception implements Serializable {
private static final long serialVersionUID = 1L;
public MyException() {
super();
}
public MyException (String msg) {
super(msg);
}
public MyException (String msg, Exception e) {
super(msg, e);
}
}
Define моего исключение в классе, который реализует ExceptionMapper:
@Provider
public class TestMapper implements ExceptionMapper<MyException> {
@Override
public Response toResponse(MyExceptionexception){
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
Это мой класс ресурса, где запрос с сервера переходит на:
@PUT
@Path("calculate")
public void calculateMethod(String id) throws MyException{
//Other code...
throw new MyException("custom error message string");
}
}
И, наконец, с клиентской стороны ВИЭ T вызова следующим образом:
public void calculateMethodClient(String id) throws MyException{
client().put("/test/", "calculate", id);
}
Когда этот метод клиент получает называется, я окружен с Try/Вылов для теста:
public boolean testClient(){
try {
client.calculateMethodClient((String) id);
return true;
} catch (MyException) {
return false;
} catch (UniformInterfaceException e){
return false;
}
}
я поставил точку останова в обоих улове блоков, но это только когда-либо хиты UniformInterfaceException
улов. Это не то, что я хочу, поскольку серверная сторона может выйти из строя по разным причинам, и я хочу каждый раз определять сообщение об ошибке в «MyException».
Может кто-нибудь объяснить, как я могу заставить это работать?
Код состояния всегда возвращается как 500, и нет возможности различать сообщения, которые возвращаются. Метод toResponse в TestMapper никогда не будет вызван. Есть ли что-то, что мне нужно сделать, чтобы заставить это работать? Разумеется, он должен отправить 400 для плохого запроса вместо 500 – maloney
. Вы можете использовать код состояния, чтобы идентифицировать хороший ответ от плохого. Если он плохой, выбросьте исключение в код клиента. –
Но это не то, что я хочу. Сервер выполняет некоторые вычисления и может потерпеть неудачу по ряду причин. Я хотел вернуть эту причину клиенту с сервера. – maloney