1
我有一個例外,我從服務器端拋出,希望在客戶端捕獲它。應使用Jersey通過REST發送異常。這是我到目前爲止有:客戶端上的Catch Rest例外
定義我的例外:
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);
}
}
定義我的例外,在它實現了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");
}
}
最後,從客戶端使RES牛逼電話如下:
public void calculateMethodClient(String id) throws MyException{
client().put("/test/", "calculate", id);
}
當此客戶端方法被調用,我已經和try/catch語句包圍測試:
public boolean testClient(){
try {
client.calculateMethodClient((String) id);
return true;
} catch (MyException) {
return false;
} catch (UniformInterfaceException e){
return false;
}
}
我已經把斷點在兩個catch塊,但它永遠只能打UniformInterfaceException
捕獲。這不是我想要的,因爲服務器端可能出於各種原因而失敗,我希望能夠每次在'MyException'中定義錯誤消息。
有人請解釋我如何才能使這個工作?
狀態碼始終會回到500,並且無法區分回來的郵件。 TestMapper中的toResponse方法似乎永遠不會被調用。我需要做些什麼來實現這個目標?當然,它應該發送一個400錯誤的請求,而不是500 – maloney
您可以使用狀態碼來識別錯誤的響應。如果它不好,請在您的客戶端代碼中拋出異常。 –
但那不是我想要的。服務器進行一些計算並可能由於多種原因而失敗。我想從服務器返回這個原因給客戶端。 – maloney