2014-01-22 3 views
1

У меня есть исключение, которое я выбрал с серверной стороны, которую я хочу поймать на стороне клиента. Исключение должно быть отправлено через 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».

Может кто-нибудь объяснить, как я могу заставить это работать?

ответ

0

Вам необходимо проверить код состояния на стороне клиента и, если это его плохой запрос, затем выбросить исключение вместе с сообщением об исключении, полученным с сервера.

+0

Код состояния всегда возвращается как 500, и нет возможности различать сообщения, которые возвращаются. Метод toResponse в TestMapper никогда не будет вызван. Есть ли что-то, что мне нужно сделать, чтобы заставить это работать? Разумеется, он должен отправить 400 для плохого запроса вместо 500 – maloney

+0

. Вы можете использовать код состояния, чтобы идентифицировать хороший ответ от плохого. Если он плохой, выбросьте исключение в код клиента. –

+0

Но это не то, что я хочу. Сервер выполняет некоторые вычисления и может потерпеть неудачу по ряду причин. Я хотел вернуть эту причину клиенту с сервера. – maloney

Смежные вопросы