我驗證了我的函數,如果在驗證過程中拋出一個異常,我希望在catch和return中停止該方法,由於某種原因,它會繼續並且只能在主嘗試中捕獲/抓住。爲什麼scala在Catch中沒有完成功能
代碼:
def updateProduct(request: UpdateProductRequest): BaseResponse[String] =
{
try
{
try
{
ValidateUpdateProductRequest(request)
}
catch
{
case ex: Exception => {
val errorResponse:ErrorResponse[String] = ErrorResponse(ErrorCode.InvalidParameters, ex.getMessage, 500)
errorResponse // <=- This does not return from function.. In debug i get here
}
}
val deleteProductResult = productRepository.updateProduct(request) //I dont want to get here !!
DTOResponse(deleteProductResult)
}
catch
{
case ex: Exception => {
Logger.error("Failed to update product Id = " +request.product.id, ex);
var errorResponse:ErrorResponse[String] = ErrorResponse(ErrorCode.GeneralError, ex.getMessage, 500)
errorResponse
}
}
}
我明白階的函數的最後一行是唯一的地方函數將返回,讓我怎麼從抓回來嗎?
原因是我想使用在BaseResponse [字符串]
由於不同錯誤代碼!
愚蠢的問題,但你肯定會拋出一個異常在你的'ValidateUpdateProductRequest'方法嗎?這可能是因爲你傳入的主要'catch'是因爲另一個異常,例如在'updateProduct'中發生了... –
是的,我一步一步地調試它,我越來越接近第二次嘗試..但函數不返回,它繼續val val deleteProductResult = productRepository.updateProduct(..),然後得到空引用,因爲產品爲空 - 這就是驗證的一部分.. – ilansch