从正文中的函数返回,而不仅仅是在REST API Scala的最后一行中播放

时间:2014-03-12 09:42:59

标签: scala rest playframework-2.1

我使用scala和play框架开发Rest API。

在我的产品控制器中,我对收到的参数进行了验证 如果它们由于某种原因而失败,我想在函数中间响应BadRequest,而不是在最后一行作为scala工作... 在下面的代码中 - 代码继续运行到Ok行..这是错误的,我想返回

def getProduct(lang: String, t: String, ids: String) = Action {
 val productIdsList =  ids.split(",").toList 

 if (productIdsList.length.equals(1) && productIdsList(0).equals("")) //Validate input params are product Ids and not empty !
 {
    var errorResponse:ErrorResponse[String] = ErrorResponse(ErrorCode.GeneralError, "No products IDs", 500)
    BadRequest(Json.toJson(errorResponse))//maybe return BadRequest(Json.toJson(errorResponse) ??
 }              

 val results = productService.getProducts(GetProductsRequest(lang,t,productIdsList));
 Ok(Json.toJson(results)) 
 // TODO: handle error
}

如果实施为:

return BadRequest(...)

它回复错误:

"method getProduct has return statement; needs result type"  

我理解这是不好的做法,那么退出函数而不完成它的最佳做法是什么(而不是抛出异常......)

1 个答案:

答案 0 :(得分:2)

只需添加一个else分支,就无法继续:

def getProduct(lang: String, t: String, ids: String) = Action {
 val productIdsList =  ids.split(",").toList 

 if (productIdsList.length.equals(1) && productIdsList(0).equals("")){ //Validate input params are product Ids and not empty !
    var errorResponse:ErrorResponse[String] = ErrorResponse(ErrorCode.GeneralError, "No products IDs", 500)
    BadRequest(Json.toJson(errorResponse))//maybe return BadRequest(Json.toJson(errorResponse) ??
 }else{
    val results = productService.getProducts(GetProductsRequest(lang,t,productIdsList));
    Ok(Json.toJson(results)) 
    // TODO: handle error
 }
}