2016-10-04 2 views
0

프레임 워크를 처음 사용했습니다. Play Framework (2.4)scala을 사용하고 있습니다. 예외 처리에 대한 귀하의 의견이 필요합니다.Play Framework 클라이언트 서버 예외 처리

재생 클라이언트 컨트롤러가 재생 서버 컨트롤러를 호출 중입니다. 이제 우리는 서버에서 던져 질 사용자 정의 예외를 소개해야하고 클라이언트는 예외를 잡아서 필요한 일을 할 것입니다.

이제 서버에서 예외를 throw하면 클라이언트에 도달하지 못합니다. 그 이유는 Play가 모든 예외를 catch하여 500 Internal Server Error

으로 변환하기 때문에 수정하지 않고 클라이언트에 예외를 보낼 수 있습니까? 재생 컨트롤러에 직접 예외를 처리하여 500을주는에서

+0

클라이언트 컨트롤러가 역방향 라우팅을 통해 직접 서버 컨트롤러 메서드를 호출합니까? 'controllers.routes.ServerController.someServerMethod()'와 비슷합니다. –

+0

역방향 라우팅이 무엇인지는 확실하지 않지만이 방법으로 서버를 호출하지는 않습니다. 서버 URL을 호출하고 URL에 매개 변수를 전달합니다. –

답변

2

재생을 중지

당신은

object ExceptionCatchingAction extends ActionBuilder[Request] { 
    override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = { 
     block(request).recover { case th => 
     //use meaningful http codes instead of OK here based on the exception type 
     Ok(Json.obj("msg" -> "error occurred", "info" -> "error info")) 
     } 
    } 
    } 

object ExampleController extends Controller { 
    def doStuff = ExceptionCatchingAction { req => 
     throw new Exception("foo") 
    } 
    } 
처럼 사용이 목적을 위해 사용자 지정 작업 빌더를 쓸 수 있습니다

귀하의 의뢰인은 모든 예외를받을 수 없습니다. 그래서 고객은 이제 무엇을해야 할지를 결정할 수 있습니다.

+0

'Ok '에 에러로 응답하는 것은 나쁜 습관입니다.보다 의미있는 http 에러 코드를 사용해야합니다. – vdebergue

+0

@vdebergue ... ur right. 대답에 대한 정보를 추가했습니다. – pamu

+0

"Ok (Json.obj ("msg "->"오류가 발생했습니다 ","정보 "->"오류 정보 ")) 예상 유형에 일치하지 않습니다 _U ' –

관련 문제